Mapとは何なのか

JavaのMapは、 key value をセットで管理するための コレクションです。

例えば、 「社員番号から社員名を取得する」 という処理を考えてみます。

Map<String, String> employees =
    new HashMap<>();

employees.put("001", "田中");
employees.put("002", "佐藤");
employees.put("003", "鈴木");

この場合、 "001" がkey、 "田中" がvalueです。

keyとvalueの関係

Mapを理解するときに重要なのが、 keyからvalueを取得する という考え方です。

String name =
    employees.get("001");

この場合、 "001" をkeyとしてMapを検索します。

結果として、 "田中" が取得されます。

key "001"
value "田中"
POINT

Mapは、 「このkeyに対応するvalueは何か?」 と考えると理解しやすくなります。

Mapにデータを追加する

Mapにデータを追加するときは、 put() を使用します。

Map<String, Integer> scores =
    new HashMap<>();

scores.put("田中", 80);
scores.put("佐藤", 90);
scores.put("鈴木", 75);

このMapでは、 String がkey、 Integer がvalueです。

つまり、

田中 → 80
佐藤 → 90
鈴木 → 75

という関係になっています。

Mapから値を取得する

Mapからvalueを取得するときは、 get() を使用します。

Integer score =
    scores.get("田中");

System.out.println(score);

結果は、

80

となります。

POINT

put() はデータを入れる。
get() はデータを取り出す。

Mapをループする

実際の開発では、 Mapに入っているデータを まとめて処理することがあります。

その場合によく使うのが entrySet() です。

for (Map.Entry<String, Integer> entry
        : scores.entrySet()) {

    System.out.println(
        entry.getKey()
    );

    System.out.println(
        entry.getValue()
    );
}

getKey() でkey、 getValue() でvalueを取得できます。

keyだけを取り出す

keyだけが必要な場合は、 keySet() を使用できます。

for (String key : scores.keySet()) {

    System.out.println(key);

}

例えば、

田中
佐藤
鈴木

のようにkeyだけを取得できます。

実際の業務コードではどう使うのか

業務システムでは、 Mapは単純なサンプルよりも 複雑な形で登場することがあります。

例えば、 「商品コードをkeyにして、 商品情報をvalueにする」 という使い方です。

Map<String, Product> products =
    new HashMap<>();

products.put(
    "A001",
    product
);

この場合、 keyは商品コード、 valueは Product オブジェクトです。

つまりMapのvalueには、 StringやIntegerだけではなく、 自分で作ったオブジェクトも 入れることができます。

IMPORTANT

業務コードでMapが難しく見える理由の一つは、
「Mapの中にさらにオブジェクトが入っている」
という構造になることです。

Mapは「箱」ではなく、
「対応関係」と考える。

Listが 「順番に並んだデータ」 だとしたら、 Mapは 「このkeyは、このvalue」 という対応関係を持ったデータです。

業務システムでは、 コード値と名称、 IDとデータ、 商品コードと商品情報など、 「何かと何かを対応させる」 場面が非常に多くあります。

今回のポイント

Mapは、 keyとvalueをセットで管理する コレクションです。

基本的には、 put() でデータを入れ、 get() でデータを取得します。

また、 entrySet() を使うことで keyとvalueをセットで ループ処理できます。

まずは、 「keyからvalueを探すもの」 と考えると、 Mapの基本構造を理解しやすくなります。