Map修羅道:Step09

0003_Map修羅道-step09 learn

📌 まずは問題を見ろ

→ 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.
消すか、変えるか。コードに意志を刻め。命令に迷うな。


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