JAVA / COLLECTION

JavaのMapを理解する

Mapは、 「キー」と「値」をセットで管理するための コレクションです。

ただ、 「Listとは何が違うのか」 「なぜkeyとvalueなのか」 「どうやって中身を取り出すのか」
というところで、 初めのうちは少し分かりにくいところがあります。

01 / BASIC

Mapとは何なのか

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

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

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

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

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

02 / KEY & VALUE

keyとvalueの関係

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

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

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

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

key "001"
value "田中"
POINT

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

03 / PUT

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

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

04 / GET

Mapから値を取得する

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

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

System.out.println(score);

結果は、

80

となります。

POINT

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

05 / LOOP

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を取得できます。

06 / KEY SET

keyだけを取り出す

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

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

    System.out.println(key);

}

例えば、

田中
佐藤
鈴木

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

07 / REAL WORLD

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

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

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

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

products.put(
    "A001",
    product
);

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

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

IMPORTANT

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

SUMMARY

今回のポイント

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

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

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

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