推奨されます, 2024

エディターズチョイス

JavaにおけるHashMapとLinkedHashMapの違い

HashMapとLinkedHashMapは互いに非常によく似たクラスで、マップを作成するために使用されます。 HashMapクラスはAbstractMapクラスを拡張して、ハッシュテーブルを使用してマップ内の要素を格納します。 LinkedHashMapクラスは、挿入順序に基づいてマップ内のエントリを管理します。 HashMapとLinkedHashMapを区別する機能は、 Hashmapがマップ内の格納されたエントリの順序を維持しないことです。 一方、 LinkedHashMapはハイブリッドデータ構造を使用して、それらが挿入されたエントリの順序を維持します。 以下の比較表で、HashMapとLinkedHashMapの他のいくつかの違いを見てみました。

比較表

比較基準ハッシュマップLinkedHashMap
基本HashMapでの挿入順序は維持されません。挿入順序はLinkedHashMapに保存されます。
データ構造HashMapはHashTableを使って地図を保存します。LinkedHashMapはHashTableとLinked Listを使って地図を保存します。
拡張/実装HashMapはAbstractMapを拡張し、Mapインターフェースを実装します。LinkedHashMapはHashmapを拡張します。
バージョンHashMapはJDK 2.0で導入されました。LinkedHashMapはJDK 4.0で導入されました。
オーバーヘッド比較的少ないオーバーヘッド。マップエントリの順序を維持する必要があるため、比較的多くのオーバーヘッドが発生します。

HashMapの定義

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

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

 Hashmap hm = new Hashmap(); hm.put( "Ajay"、275); hm.put( "Vijay"、250); hm.put( "Jonny"、150); hm.put( "Jordan"、200); System.out.println(hm); / * output * / {Vijay = 250、Jonny = 150、Ajay = 275、Jordan = 200} 

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

LinkedHashMapの定義

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

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

JavaにおけるHashMapとLinkedHashMapの主な違い

  1. 最も重要な違いは、HashMapの挿入順序は保持されないのに対し、LinkedHashMapの挿入順序は保持されることです。
  2. マップの要素を格納するためにHashMapによって使用されるデータ構造はHashtableです。 一方、LinkedHashMapで使用されるデータ構造は、 Linked listHashtableです。
  3. HashMapクラスはAbstractMapクラスを拡張し、 Mapインタフェースを実装します。 ただし、LinkedHashMapクラスはHashMapクラスの子クラスです。つまり、LinkedHashMapクラスはHashMapクラスを拡張します。
  4. HashMapクラスはJDK 2.0バージョンで導入されました。 LinkedHashMapクラスは、 JDK 4.0バージョンで後で導入されました。
  5. 比較的LinkedHashMapクラスは、マップに挿入された要素の順序を維持する必要があるため、HashMapよりもオーバーヘッドが大きくなります。

結論:

LinkedHashMapは、マップに挿入されている要素の順序が心配な場合にのみ使用する必要があります。

Top