Map修羅道:Step08

0003_Map修羅道-step08 learn

📌 まずは問題を見ろ

→ javadrill.tech で出題された問題を見る(Step08)


問題のポイント

  • HashMapnull をキーにも値にも使える(1キー限定)
  • TreeMap では null キーは例外になるが、HashMap は許容
  • 実際に登録して出力することで、どう扱われるかを観察する

まず、日本語で考えろ

  • 会員IDと名前の一覧をMapで管理している。
  • でも、「nullなID」や「名前がnull」のデータが入ってくることもある。
  • そんなとき、HashMapは受け入れるのか?
  • そして、出力結果はどうなるのか?

コメントを書け

// Map に通常のデータと null キー・null 値を登録する
// for 文で entrySet を使って出力し、動作を確認する

コメントに従ってコードを書け

import java.util.*;

public class MapUtil {
    public static void testNullBehavior() {
        // Map に通常のデータと null キー・null 値を登録する
        Map<Integer, String> memberMap = new HashMap<>();
        memberMap.put(1001, "Yamada");
        memberMap.put(null, "Tanaka");     // nullキー
        memberMap.put(1002, null);         // null値

        // for 文で entrySet を使って出力し、動作を確認する
        for (Map.Entry<Integer, String> entry : memberMap.entrySet()) {
            System.out.println(entry.getKey() + " → " + entry.getValue());
        }
    }
}

実行結果の例(順不同)

1001 → Yamada  
null → Tanaka  
1002 → null

コードの解説

  • HashMapnull キーを1件登録 → エラーにならず正常に扱われる。
  • null 値も問題なく登録・出力される(表示は "null" と出る)。
  • TreeMap では null キーは NullPointerException になるため、今回は HashMap を明示的に使用
  • entrySet() を使ってキーと値を同時に出力することで、null の挙動を観察しやすくする

つまづきやすいポイント

  • HashMap は null を1キーだけ許す。複数登録しても上書きされるだけ。
  • 値としての null は問題ないが、扱い方次第でバグの温床になる
  • get() で null が返ってきたとき、それが「登録されていたnull」なのか「未登録」なのかは分からない。
    containsKey() との併用が基本になる

teshのひとこと

nullは、なかったことにはしてくれへん。
そこに“ある”という前提で動くMapやからこそ、nullは特別扱いになる。

見えるか?エラーにはならん。けど、おまえが見落とすと一番怖い奴やで。


Just keep typing, baby.
見えない値を疑え。コードの中に、見落としの芽が潜んでる。


👉 Map修羅道:全体のステップ構成はこちら