まずは問題を見ろ
→ 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.
// 見えない値を疑え。コードの中に、見落としの芽が潜んでる。

