はじめに
Java歴5ヶ月目です(もうそんなに経っていたのか)。
今まで避けていたMapとついに関わって、仲良くなりたいと思います。
3ヶ月の研修の間、オンリーArrayListでやってきました。
それでもなんとかなったのです。
しかし、初めて現場に入り、こんなにもMapが使われているとは思いませんでした。
あまりに使ってなかったので、put?ってなりました。やばすぎる。
Mapについてまとめられている記事はたくさんありますが、
Map苦手マンだった私でも分かりやすいと思った部分をまとめていきたいと思います。
Mapとは
キー(key)と値(value)をペアにして複数のデータを格納できるものです。
「キー」に対応する「値」を探せる辞書のようなものです。
ええっと、りんごは英語でなんて言うんだっけな。。
Mapを使えば、キー「りんご」で、値「apple」を探すことができます。
Mapを使っていこう!初期化
Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();
// 例
Map<String, String> map = new HashMap<>();
キーと値のペアを追加する:put
map.put("りんご", "apple");
map.put("オレンジ", "orange");
map.put("バナナ", "banana");
キーに対応する値を得る:get
System.out.println(map.get("りんご"));
// 出力結果 apple
拡張for文で値を得る
mapにいくつかデータを入れたのでfor文を使って全て表示したいですよね。
この部分が私の苦手なところでした。
ここからはキーと値が分かりやすいように、キーを商品名、値を値段でやっていきます。
Map<String, Integer> fruits = new HashMap<>();
fruits.put("りんご", 128);
fruits.put("オレンジ", 98);
fruits.put("バナナ", 198);
キーも値も表示したい:entrySet、keySet
for (Map.Entry<String, Integer> entry : fruits.entrySet()) {
System.out.println(entry.getKey() + "は" + entry.getValue() + "円です。");
}
// 出力結果
// りんごは128円です。
// オレンジは98円です。
// バナナは198円です。
Entryってなんや!長すぎてイヤ!!
エントリ(entry)とはキーと値のペアのことです。
entrySetは全てのエントリを得るメソッドです。
同じことをkeySetでもっとシンプルに書けます。
keySetは全てのキーを得るメソッドです。
for (String fruit : fruits.keySet()) {
System.out.println(fruit + "は" + fruits.get(fruit) + "円です。");
}
// 出力結果
// りんごは128円です。
// オレンジは98円です。
// バナナは198円です。
だったらこれだけ覚えときゃいいやん。
教科書、なんで最初にややこしいもの書くのよ。。
値だけでいいとき:values
うーん、りんごっていくらだっけなぁ。値段だけ知りたい。
for (int value : fruits.values()) {
System.out.println(value + "円");
}
// 出力結果
// 128円
// 98円
// 198円
その要素が含まれているか:containKey、containValue
if (fruits.containsKey("バナナ")) {
System.out.println("バナナがオススメです。");
}
// 出力結果 バナナがオススメです。
if (fruits.containsValue(98)) {
System.out.println("お買い得です。");
}
// 出力結果 お買い得です。
他のメソッド:size、remove、clear、isEmpty
要素数を得る(size)、要素を削除する(remove)、全要素を削除する(clear)、
ここらへんはListなど他コレクションと同様です。
先ほどの商品名と値段のマップを使います。
System.out.println(fruits.size());
// 出力結果 3
// 「キー:りんご、値:128」を削除。引数はキーだけでOK
fruits.remove("りんご");
// マップに入れた全ての要素を削除。引数は必要なし。
fruits.clear();
if (fruits.isEmpty()) {
System.out.println("申し訳ありません。今日は売り切れです。");
}
// 出力結果 申し訳ありません。今日は売り切れです。
さいごに
Qiitaに書くことで整理されました。
これで少しはMapと仲良くなれたかも?!
参考
・Java言語プログラミングレッスン 第3版(下) オブジェクト指向を始めよう 結城 浩 (著)
・https://www.tech-teacher.jp/blog/java-map/