102 「Map修羅道」 Step01 解答例

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 と入れたとしても、出力順がそれと一致する保証はありません。

順序が重要な場面では LinkedHashMapTreeMap を使う必要があります(後のステップで扱います)。


まとめ:このステップで学ぶべきこと

  • Mapに同じキーで put() すると値が上書きされる
  • Map.entrySet() を使ったループの書き方
  • HashMap は出力順序を保証しない

Mapの基本操作は、この「上書きされる」という挙動を理解することから始まります。

102 ステップアップ問題 「Map修羅道」


Just Keep Typing, Baby!では、この「Map修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!

// tesh:
// 読み飛ばすと、あとで必ず後悔する系。読んどけ。