📌 まずは問題を見ろ
→ javadrill.tech で出題された問題を見る(Step08)
問題のポイント
HashMap
は null をキーにも値にも使える(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
コードの解説
HashMap
にnull
キーを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.
見えない値を疑え。コードの中に、見落としの芽が潜んでる。