MapUtil.java
import java.util.HashMap;
import java.util.Map;
public class MapUtil {
public static void printMemberMap() {
// Mapを作成。キーがInteger(会員番号)、値がString(名前)
Map<Integer, String> memberMap = new HashMap<>();
// 参加者を登録。最初に101番Yamadaを登録
memberMap.put(101, "Yamada");
// 102番Tanakaを登録
memberMap.put(102, "Tanaka");
// 101番Suzukiを登録 → すでに101番があるため、"Yamada" が "Suzuki" に上書きされる
memberMap.put(101, "Suzuki");
// Mapの内容を1件ずつ出力する(keyとvalueを取得)
for (Map.Entry<Integer, String> entry : memberMap.entrySet()) {
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key + " → " + value);
}
}
}
解説:Mapにおけるキーの重複
この問題では、Mapに同じキー(ここでは101)を複数回 put()
した場合に何が起こるかを体感することが目的です。
上書きの仕組み
JavaのMapでは、キーが重複している場合、新しい値で上書きされます。
例:
map.put(101, "Yamada");
map.put(101, "Suzuki");
この場合、Mapの中では 101 → "Suzuki"
のみが保持されます。"Yamada"
は消えます。
Mapの出力方法
Mapの出力には以下の方法があります:
for (Map.Entry<K, V> entry : map.entrySet())
- キーと値を同時に扱う場合に便利
for (K key : map.keySet())
- キーしか扱わないとき用(値は
map.get(key)
で取得)
- キーしか扱わないとき用(値は
この問題では、明示的にループして出力することが要件です。
したがって System.out.println(map)
のような一発表示は禁止です。
順序についての注意
HashMap
は キーの順序を保証しません。
たとえば、登録順に 101 → 102 → 101
と入れたとしても、出力順がそれと一致する保証はありません。
順序が重要な場面では LinkedHashMap
や TreeMap
を使う必要があります(後のステップで扱います)。
まとめ:このステップで学ぶべきこと
- Mapに同じキーで
put()
すると値が上書きされる Map.entrySet()
を使ったループの書き方HashMap
は出力順序を保証しない
Mapの基本操作は、この「上書きされる」という挙動を理解することから始まります。
Just Keep Typing, Baby!では、この「Map修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!
// tesh:
// 読み飛ばすと、あとで必ず後悔する系。読んどけ。