📌 まずは問題を見ろ
→ javadrill.tech で出題された問題を見る(Step01)
問題のポイント
Map.put()
で同じキーに値を2回登録したら、どうなる?Map.entrySet()
を使って、キーと値のペアを1つずつ取り出して出力できるか?System.out.println(map)
で出力するな。ループ処理で中身を明示的に出力する練習。
まず、日本語で考えろ
- 会員番号と名前をセットで登録する。
- 同じ番号が2回出てくる(101 → “Yamada” と “Suzuki”)。
- 最終的に Map には、どの名前が残る?
コメントを書け
// Mapを作成する(キー: 会員番号、値: 名前)
// 3件のデータをputする(うち1つはキー重複)
// entrySet()を使って、Mapの中身を1件ずつ出力する
コメントに従ってコードを書け
import java.util.*;
public class MapUtil {
public static void printMemberMap() {
// Mapを作成する(キー: 会員番号、値: 名前)
Map<Integer, String> memberMap = new HashMap<>();
// 3件のデータをputする(うち1つはキー重複)
memberMap.put(101, "Yamada");
memberMap.put(102, "Tanaka");
memberMap.put(101, "Suzuki"); // 同じキーで上書き
// entrySet()を使って、Mapの中身を1件ずつ出力する
for (Map.Entry<Integer, String> entry : memberMap.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}
}
}
実行結果の例(順不同)
101 → Suzuki
102 → Tanaka
コードの解説
Map<Integer, String>
を使って、キーに会員番号(int)、値に名前(String)を登録。memberMap.put(101, "Suzuki")
によって、先に登録された"Yamada"
は 上書きされて消える。entrySet()
を使うことで、キーと値のペアを同時に取り出してループできる。System.out.println(map)
のような一括出力ではなく、構造を明示的に扱う書き方を身につけることが今回の目的。
つまづきやすいポイント
- 同じキーで
put()
したとき、前の値は完全に上書きされる。Map は「1つのキーに対して1つの値」しか持てない。 entrySet()
はMap.Entry
型の集合であり、キーと値を一緒に扱えるループ構文が使える。keySet()
+get()
の組み合わせでも出力できるが、entrySet() のほうが効率的でコードも読みやすい。
teshのひとこと
「Mapに同じキーを入れたらどうなる?」
そんなの知ってる? いや、“書いて”“出して”“見て”実感するまでがJavaや。
print(map) じゃ見えへん構造を、自分の手で取り出せ。
構造が見えたとき、Mapはもう怖くない。
Just keep typing, baby.
隠れた上書きを見抜け。構造は、出力して初めておまえの目に宿る。