102 「Map修羅道」 Step08 解答例

MapUtil.java

import java.util.*;

public class MapUtil {
    public static void testNullBehavior() {
        // 会員IDと氏名を管理するMapを作成(HashMapはnullキー・null値を許容)
        Map<Integer, String> memberMap = new HashMap<>();

        // 通常のデータを登録
        memberMap.put(1001, "Yamada");

        // nullをキーとして登録(有効)
        memberMap.put(null, "Tanaka");

        // nullを値として登録(有効)
        memberMap.put(1002, null);

        // Mapの内容を出力
        for (Map.Entry<Integer, String> entry : memberMap.entrySet()) {
            Integer id = entry.getKey();
            String name = entry.getValue();
            System.out.println(id + " → " + name);
        }

        // nullキーで取得できるか確認
        System.out.println("nullキーの値: " + memberMap.get(null));

        // 値がnullのときの取得確認
        System.out.println("ID 1002 の値: " + memberMap.get(1002));
    }
}

解説:HashMapとnullの関係

JavaのHashMapは、他のMap実装と比べて柔軟で、nullをキーや値に許容します。


nullキーについて

map.put(null, "Tanaka");
  • HashMapnullキーを1つだけ 登録できます
  • すでにnullキーがある状態で再度 put(null, ...) すると、上書きされます
  • TreeMap などでは nullキーは NullPointerException の原因になるので注意

null値について

map.put(1002, null);
  • null値として何個でも登録可能
  • ただし、null 値と「未登録」を区別するには containsKey() での存在確認が必要
map.containsKey(1002); // true(nullが登録されている)
map.get(1002);         // null(値がnull)
map.containsKey(9999); // false(未登録)

出力結果の例(順不同)

1001 → Yamada
null → Tanaka
1002 → null
nullキーの値: Tanaka
ID 1002 の値: null

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

  • HashMapはnullキーを1つ、null値を複数許可する
  • 値がnullなのか、未登録なのかは containsKey() で判別する
  • nullに関する仕様は Map実装ごとに違う ので要注意

Mapの柔軟さと落とし穴の両方を体験する重要なステップです。


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