JavaでのHashMapとLinkedHashMapの違い

著者: Laura McKinney
作成日: 2 4月 2021
更新日: 10 5月 2024
Anonim
Подготовка к Java собеседованию #5.4 Collections API: HashMap, LinkedHashMap и TreeMap
ビデオ: Подготовка к Java собеседованию #5.4 Collections API: HashMap, LinkedHashMap и TreeMap

コンテンツ


HashMapとLinkedHashMapはクラスであり、互いに非常に似ており、マップの作成に使用されます。 HashMapクラスはAbstractMapクラスを拡張し、ハッシュテーブルを使用して要素をマップに格納します。 LinkedHashMapクラスは、挿入順序に基づいてマップ内のエントリを維持します。 HashMapとLinkedHashMapを互いに区別する機能は、 ハッシュマップ マップに保存されたエントリの順序を維持しません。一方、 LinkedHashMap ハイブリッドデータ構造を使用して、挿入されたエントリの順序を維持します。以下の比較チャートで、HashMapとLinkedHashMapのその他のいくつかの違いを調べました。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 結論

比較表

比較の根拠ハッシュマップLinkedHashMap
ベーシックHashMapでの挿入順序は保持されません。挿入順序はLinkedHashMapで保持されます。
データ構造HashMapはHashTableを使用してマップを保存します。LinkedHashMapは、リンクリストと共にHashTableを使用してマップを格納します。
拡張/実装HashMapはAbstractMapを拡張し、Mapインターフェイスを実装します。LinkedHashMapはHashmapを拡張します。
バージョンHashMapはJDK 2.0で導入されました。LinkedHashMapはJDK 4.0で導入されました。
オーバーヘッド比較的少ないオーバーヘッド。マップエントリの順序を維持する必要があるため、比較的オーバーヘッドが大きくなります。


HashMapの定義

HashMapは、マップの作成に使用されるクラスです。実装する 地図 インタフェース。また、 AbstractMap ハッシュテーブルを使用して、エントリをマップに格納できるようにするクラス。マップのエントリは 各キーが値に関連付けられているペア。エントリ内のキーは値を取得するために使用されるため、キーは一意である必要があります。そのため、HashMapでは重複キーは許可されません。ただし、マップの各エントリのキーは異なるタイプを持っている場合があります。つまり、HashMapによって作成されたマップのキーは異種である場合があります。 HashMapがマップを格納するために使用するデータ構造は、ハッシュテーブルです。

HashMap内のエントリの挿入順序は保持されません。 HashMapを使用して作成されたマップへのエントリの挿入は、エントリ内のキーによって計算されたハッシュコードに基づいています。誤ってHashMapに重複キーを入力した場合、そのキーの以前の値が提案された新しい値に置き換えられ、古い値が返されます。重複キーが使用されておらず、置換が行われていない場合、キーは常にNullを返します。次の例を使用して、ハッシュマップにエントリを追加する方法を見てみましょう。

ハッシュマップhm = new Hashmap(); hm.put( "Ajay"、275); hm.put( "Vijay"、250); hm.put( "Jonny"、150); hm.put( "Jordan"、200); System.out.ln(hm); / * output * / {Vijay = 250、Jonny = 150、Ajay = 275、Jordan = 200}

上記のコードのように、HashMapのオブジェクトを作成し、putsメソッドを使用してエントリを追加したことがわかります。HashMapオブジェクトを編集すると、エントリは挿入された順に編集されません。したがって、HashMapのエントリが返す順序を装うことはできません。 HashMapはMapインターフェイスとAbstractMapクラスのすべてのメソッドを使用し、新しいメソッドを導入しません。独自のコンストラクタがあります。ハッシュマップのデフォルトの容量は 16 デフォルトの充填率は 0.75.


LinkedHashMapの定義

LinkedHashMapは、マップを作成するために使用するクラスでもあります。 LinkedHashMapは ハッシュマップ クラスであり、後でJDKバージョン4.0のHashMapに導入されました。 HashMapクラスの子クラスであるLinkedHashMapは、コンストラクターとメソッドを含むHashMapクラスとまったく同じです。ただし、LinkedHashMapは、マップへのエントリの挿入順序を維持するという意味で異なります。 LinkedHashMapがマップを保存するために使用するデータ構造は次のとおりです。 リンクリスト そして ハッシュ表.

HashMapによって継承されたメソッドに加えて、LinkedHashMapは1つの新しいメソッドを導入します。 removeEldestEntry()。このメソッドは、マップ内の最も古いエントリを削除するために使用されます。 LinkedHashMapのデフォルトの容量は16で、デフォルトの充填率は0.75で、これもHashMapクラスに似ています。

  1. 最も重要な違いは、HashMapの挿入順序が 保存されない 一方、LinkedHashMapの挿入順序は 保存された.
  2. HashMapがマップの要素を保存するために使用するデータ構造は次のとおりです。 ハッシュ表。一方、LinkedHashMapで使用されるデータ構造は リンクリスト そして ハッシュ表.
  3. HashMapクラスは拡張します AbstractMap クラスと実装 地図 インタフェース。ただし、LinkedHashMapクラスは、 ハッシュマップ クラス、すなわちLinkedHashMapクラスはHashMapクラスを拡張します。
  4. HashMapクラスは JDK 2.0 バージョン。 LinkedHashMapクラスは後に導入されました JDK 4.0 バージョン。
  5. LinkedHashMapクラスは、マップに挿入された要素の順序を維持する必要があるため、HashMapよりもオーバーヘッドが大きくなります。

結論:

LinkedHashMapは、マップに挿入された要素のシーケンスが懸念される場合にのみ使用する必要があります。