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を検索します。
結果として、
"田中"
が取得されます。
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
となります。
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だけではなく、 自分で作ったオブジェクトも 入れることができます。
業務コードでMapが難しく見える理由の一つは、
「Mapの中にさらにオブジェクトが入っている」
という構造になることです。
FIELD NOTE
Mapは「箱」ではなく、
「対応関係」と考える。
Listが 「順番に並んだデータ」 だとしたら、 Mapは 「このkeyは、このvalue」 という対応関係を持ったデータです。
業務システムでは、 コード値と名称、 IDとデータ、 商品コードと商品情報など、 「何かと何かを対応させる」 場面が非常に多くあります。
SUMMARY
今回のポイント
Mapは、 keyとvalueをセットで管理する コレクションです。
基本的には、
put()
でデータを入れ、
get()
でデータを取得します。
また、
entrySet()
を使うことで
keyとvalueをセットで
ループ処理できます。
まずは、 「keyからvalueを探すもの」 と考えると、 Mapの基本構造を理解しやすくなります。