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を検索します。
結果として、
"田中"
が取得されます。
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の中にさらにオブジェクトが入っている」
という構造になることです。
SUMMARY
今回のポイント
Mapは、 keyとvalueをセットで管理する コレクションです。
基本的には、
put()
でデータを入れ、
get()
でデータを取得します。
また、
entrySet()
を使うことで keyとvalueをセットで ループ処理できます。
まずは、 「keyからvalueを探すもの」 と考えると、 Mapの基本構造を理解しやすくなります。