📌 まずは問題を見ろ
→ javadrill.tech で出題された問題を見る(Step09)
問題のポイント
remove()
はキーとその値をMapから完全に消すreplace()
は既存のキーに対して値を上書きする- 両者の違いを、出力を見ながら実感せよ
まず、日本語で考えろ
- 名簿がある(会員番号 → 名前)
- 1人を削除して、もう1人の名前を修正したい。
- 削除は
remove()
、修正はreplace()
。 - コードと出力を交互に見ながら、“消えたのか、残ってるのか”を確かめろ。
コメントを書け
// Map を初期化して3件のデータを登録
// Mapの状態を出力
// remove() で会員番号2を削除し、Mapの状態を出力
// replace() で会員番号3の名前を更新し、Mapの状態を出力
コメントに従ってコードを書け
import java.util.*;
public class MapUtil {
public static void testRemoveAndReplace() {
Map<Integer, String> memberMap = new HashMap<>();
// データ登録
memberMap.put(1, "Yamada");
memberMap.put(2, "Tanaka");
memberMap.put(3, "Suzuki");
// 初期状態
System.out.println("初期状態:");
printMap(memberMap);
// 削除
memberMap.remove(2);
System.out.println("会員番号2を削除した後:");
printMap(memberMap);
// 更新
memberMap.replace(3, "Kato");
System.out.println("会員番号3の名前を更新した後:");
printMap(memberMap);
}
private static void printMap(Map<Integer, String> map) {
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}
System.out.println();
}
}
実行結果の例(順不同)
初期状態:
1 → Yamada
2 → Tanaka
3 → Suzuki
会員番号2を削除した後:
1 → Yamada
3 → Suzuki
会員番号3の名前を更新した後:
1 → Yamada
3 → Kato
コードの解説
- 最初に
put()
で3件のデータを登録。 remove(2)
によって、キー2とその値がMapから完全に消える。replace(3, "Kato")
によって、キー3の値が上書きされる(キーは残る)。printMap()
を使って段階ごとに Map の状態を出力し、変化を可視化。
つまづきやすいポイント
remove()
はそのキーを完全に消すので、その後get()
しても null が返る。replace()
は既に存在するキーにしか効かない(存在しないと何も起きない)。put()
を使っても上書きはできるが、意図が明確なら replace() を使うとコードの意味が伝わりやすい。
teshのひとこと
「値を変える」と「値を消す」は、全然ちゃうねん。
それを知らずにコードを書いてると、データが“いつのまにかない”地獄に落ちるぞ。
Mapは正直や。
“消せ”と言えば消す。“変えろ”と言えば変える。
おまえはその違いを、ちゃんと命令できてるか?
Just keep typing, baby.
消すか、変えるか。コードに意志を刻め。命令に迷うな。