Javaのマップはキーと値とのペアの集まりを管理するオブジェクトです。Map
のようにキーと値の型を<>
の中に指定します。
Map |
😎 Mapインターフェースのメソッド
Mapインターフェースの代表的なメソッドは次のとおりです。
メソッド名 | 説明 |
---|---|
containsKey |
指定したキーの存在チェック |
containsValue |
指定した値の存在チェック |
entrySet |
要素全体をなめるためのMap.Entry セットを返す |
forEach |
要素ごとに指定処理を実行 |
get |
指定したキーで値を検索 |
getOrDefault |
指定したキーで値を検索し、値がなければデフォルト値を返す |
keySet |
キーの集合を取得 |
merge |
指定したキーの既存要素を使って新要素を追加 |
put |
要素(キーと値のペア)を追加 |
putAll |
要素をまとめて追加 |
remove |
要素の削除 |
replace |
指定したキーの値を置換 |
replaceAll |
要素を置換 |
size |
要素数の取得 |
values |
値の集合を取得 |
🐞 Mapインターフェースを実装する具象クラス
Mapインターフェースを実装する主な具象クラスHashMap
、LinkedHashMap
、TreeMap
を紹介します。
HashMap
HashMap
の特徴は次のとおりです。
- 内部に配列を確保して、ハッシュ関数を介したキーと値とのペアを格納
- キーをハッシュ値から生成するため、順序は不定となります
- ハッシュ関数の衝突は性能低下を招くため、適切なハッシュ表のサイズを指定すべき
public class MapSample { |
LinkedHashMap
LinkedHashMap
の特徴は次のとおりです。
- ハッシュ表と
LinkedList
と同じリンクリストを内部に保持します - 要素を追加するとハッシュ表とリンクリスト両方に要素を追加します
- 要素の取得では、ハッシュ表を介して要素を検出します
- 要素を列挙する際はリンクリストにしたがって、要素の追加順に出力されます
public class MapSample { |
TreeMap
TreeMap
の特徴は次のとおりです。
- 内部的には2分探索木の赤黒木でデータを格納します
- 要素のキーが比較可能なことが条件です
- キーがソートされた状態でデータが格納されます
public class MapSample { |
次の図は2分木からソート順のデータを取得する流れです。
出典:改訂2版 パーフェクトJava
NavigatableMap
NavigatableMap
はキーの完全一致なくても、近いキーで検索できます。利用例は次のとおりです。
public class MyNavigatableMap { |
🚜 マップの実装クラスの使い分け
- 順序が不要な場合は
HashMap
- 追加した順序が欲しい場合は
LinkedHashMap
- ソートされた順序が欲しい場合は
TreeMap