Javaにおける「Map」は、キーと値のペアを格納するためのデータ構造です。Mapは非常に強力であり、特定のキーに関連付けられた値を迅速に検索するために使用されます。この記事では、JavaにおけるMapの基本的な使い方、主要な実装クラス、およびよく使われるメソッドについて、詳細に解説します。
1. Mapの基本概念
Mapは、キーと値のペアを格納するインターフェースです。キーは一意でなければならず、各キーは1つの値に関連付けられます。Mapには次の基本的な特徴があります:

- キーは一意: 同じキーに複数の値を格納することはできません。
- 順序の保持: 一部のMap実装は順序を保持しますが、他の実装は順序を保持しません。
- null値: 一部のMap実装はnullキーとnull値をサポートしますが、すべての実装がサポートしているわけではありません。
2. Mapの主要な実装
Javaの標準ライブラリでは、Map
インターフェースのいくつかの実装が提供されています。主なものは以下の通りです。
2.1 HashMap
HashMap
は、最も一般的に使用されるMapの実装です。内部でハッシュテーブルを使用しており、キーと値のペアを格納します。検索、挿入、削除の操作が非常に高速です(平均的にO(1)の時間計算量)。ただし、順序を保証しません。
javaMap map = new HashMap<>();
map.put("A", "Apple");
map.put("B", "Banana");
System.out.println(map.get("A")); // 出力: Apple
2.2 TreeMap
TreeMap
は、キーが自然順序または指定されたコンパレータに従って順序付けられるMapです。内部的には赤黒木を使用しており、キーがソートされて格納されます。そのため、順序付きでデータを管理する必要がある場合に有効です。
javaMap map = new TreeMap<>();
map.put(3, "Three");
map.put(1, "One");
map.put(2, "Two");
System.out.println(map); // 出力: {1=One, 2=Two, 3=Three}
2.3 LinkedHashMap
LinkedHashMap
は、HashMap
と同様にハッシュテーブルを使用しますが、挿入順序を保持します。つまり、キーを追加した順番にエントリを繰り返します。これを使用すると、順序が重要な場合に便利です。
javaMap map = new LinkedHashMap<>();
map.put("A", "Apple");
map.put("B", "Banana");
map.put("C", "Cherry");
System.out.println(map); // 出力: {A=Apple, B=Banana, C=Cherry}
2.4 WeakHashMap
WeakHashMap
は、キーとしてWeakReference
を使用するMapです。これはガベージコレクション(GC)がキーを回収可能にした場合、そのエントリを自動的に削除する特性があります。キャッシュなどの一時的なデータを管理する際に有用です。
3. Mapの主要なメソッド
Map
インターフェースには、キーと値を操作するための多くのメソッドが定義されています。以下はその一部です。
3.1 put(K key, V value)
指定されたキーに対する値をMapに追加します。キーが既に存在する場合は、その値を新しい値に置き換