はじめに
現場で新規参画者に対してMapの説明をする機会が度々あるため、
自身の説明用のレジュメも兼ねて記事として投稿しようと思いました。
Mapとは
Mapは、Javaの標準APIであるコレクションフレームワークのインタフェースの一種です。
ListやSetといった、Collectionインタフェースとの違いとしては、キーと値をペアとして管理するデータ構造であることが挙げられます。
Mapは一意のキーに対して一つの値を関連付けることができるため、キーを使って効率的にデータを管理できます。
上述の通り、Mapはインタフェースのため、
一般的にプログラム上で扱う際にはMapの各クラスをインポートして使用します。
Mapの種類
Javaでよく使われるMapの実装には、以下の3つがあります。
- HashMap:
最も一般的なMapの実装で、キーのハッシュコードを使って高速な検索と格納を行います。注意点として、要素の順序は保証されません。 - TreeMap
キーを順序通りに自動でソートするMapです。ここでいう順序とは、自然順序を基本としますが、指定したコンパレータで順序づけることも可能です。順番通りに要素を管理したい場合に使用します。 - LinkedHashMap:
挿入された順序やアクセスされた順序で要素を保存するMapです。キャッシュの実装などに役立ちます。
Mapのインスタンス化
Mapのインスタンス化の方法です。
例としてHashMapで記載します。
Map<String, Integer> wkMap = new HashMap<String, Integer>();
このコードでは、キーがString型、値がInteger型のHashMapを作成しています。
よく使うメソッド
put(key, value)
putメソッドは、Mapに要素を追加するためのメソッドです。一つのキーに対して一つの値しか関連付けられないため、同一のキーで複数回putすると、値は上書きされます。
wkMap.put("key1", 100);
wkMap.put("key1", 200); // "key1"に対応する値が"100"から"200"に上書きされる
isEmpty()
isEmptyメソッドは、Mapが空であるかどうかを判定します。
boolean empty = wkMap.isEmpty();
values()
valuesメソッドは、Mapに格納されているすべての値を取得します。たとえば、特定の計算に利用する際に使用します。
Collection<Integer> values = wkMap.values();
int total = 0;
for (Integer value : values) {
total += value;
}
entrySet()
entrySetメソッドは、Mapに含まれるすべてのキーと値のペアを取得します。キーを取得する場合はgetKey()、値を取得する場合はgetValue()を使用します。
for (Map.Entry<String, Integer> entry : wkMap.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
}
keySet()
keySetメソッドは、Mapのすべてのキーを取得します。キーのみを使用する場合に便利です。
Set<String> keys = wkMap.keySet();
clear()
clearメソッドは、Mapの全ての要素を削除します。
wkMap.clear();
remove(key)
removeメソッドは、指定したキーに関連付けられた要素を削除します。
wkMap.remove("key1");
終わりに
Mapは用途に応じてさまざまな方法で使い分けることが重要です。適切なMapの実装を選び、メソッドを活用することで、コードの効率化と可読性を向上させましょう。
誤り等ありましたらご指摘ください。