Java の LinkedHashMap とは何ですか?
Collections フレームワークの LinkedHashMap クラスは、MapインターフェイスのHashtableおよびLinkedList実装です。エントリをハッシュテーブルに保存し、二重リンク リストを内部で使用して挿入順序を維持します。この LinkedList は、キーがMapに挿入された順序である挿入順序を定義します。HashMapには素早い挿入、検索、削除という利点がありましたが、 LinkedHashMapではLinkedListの実装によって挿入順序も維持されます。
LinkedHashMapの特徴
- キーに基づいた値が含まれます。
- ユニークな要素が含まれています。
- 1 つの null キーと複数の null 値を持つことができます。
- 非同期です。
- 挿入順序が維持されるため、反復処理のコストが高くなります。
パフォーマンス要因
LinkedHashMapのパフォーマンスは、主に以下に説明する 2 つの要素に依存します。容量
容量とは、保存できるエントリの数を意味します。パラメータを指定しない場合、デフォルトの容量は16です。負荷係数 負荷係数とは、パラメータとして指定された特定の割合でHashMapが設定されるたびに、サイズが 2 倍の新しい HashMap が作成され、すべてのエントリがこの新しい HashMap に移動されることを意味します。HashMap のデフォルトの負荷係数は0.75です。充填率とも呼ばれます。LinkedHashMapの宣言
LinkedHashMapを作成するには、まずjava.util.LinkedHashMapパッケージをインポートする必要があります。
LinkedHashMap<Key, Value> lhm = new LinkedHashMap<>(12, 0.5f);
ここで、 Key はマップ内のキーのタイプです。 値は、マップ内でマップされた値のタイプです。 12は容量で、マップに 12 個のエントリを保存することを意味します。 0.5fは負荷係数で、50% が入力されると新しいマップが作成され、すべての値がこの新しいマップに移動されることを意味します。
LinkedHashMap の一般的なメソッド
以下は、 LinkedHashMapの一般的なメソッドのリストです。メソッド | 説明 |
---|---|
クリア() | マップ内のすべてのマッピングを削除します。 |
containsValue(オブジェクト値) | マップがキーを指定された値にマップする場合は true を返します。 |
エントリーセット() | マップ内のマッピングの Set ビューを返します。 |
get(オブジェクトキー) | 指定されたキーに対する値を返すか、キーが指定されていない場合は null を返します。 |
キーセット() | マップ内のキーの Set ビューを返します。 |
値() | マップ内の値のコレクション ビューを返します。 |
getOrDefault(オブジェクトキー, VdefaultValue) | 指定されたキーが関連付けられている値を返します。キーが関連付けられていない場合は、defaultValue を返します。 |
LinkedHasMap の例
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// Creating a LinkedHashMap of odd numbers
LinkedHashMap<String, Integer> oddNumbers = new LinkedHashMap<>();
// Using the put() method
oddNumbers.put("One", 1);
oddNumbers.put("Three", 3);
System.out.println("LinkedHashMap1: " + oddNumbers);
// Creating another LinkedHashMap
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("Two", 2);
// Using putAll() method
numbers.putAll(oddNumbers);
System.out.println("LinkedHashMap2: " + numbers);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
// Using keySet() method
System.out.println("Keys: " + numbers.keySet());
// Using values() method
System.out.println("Values: " + numbers.values());
// Using get() method
int value1 = numbers.get("Three");
System.out.println("Returned Number: " + value1);
// Using getOrDefault() method
int value2 = numbers.getOrDefault("Five", 5);
System.out.println("Returned Number: " + value2);
// Using remove() method
int value = numbers.remove("Two");
System.out.println("Removed value: " + value);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
}
}
出力
LinkedHashMap1: {One=1, Three=3} LinkedHashMap2: {Two=2, One=1, Three=3} キー/値マッピング: [Two=2, One=1, Three=3] キー: [Two, One 、Three] 値: [2、1、3] 返される数値: 3 返される数値: 5 削除される値: 2 キー/値のマッピング: [One=1、Three=3]
LinkedHashMap と HashMap の比較
どちらもMapインターフェイスを実装しているのに対し、両者の違いをいくつか見てみましょう。- LinkedHashMap は、二重リンク リストを内部的に実装するため、挿入順序を維持します。
- LinkedHashMap はLinkedListを実装するため、より多くのストレージを必要とします。
- パフォーマンスに関しては、LinkedHashMap はHashMapよりも遅くなります。
GO TO FULL VERSION