Map修羅道:Step05

0003_Map修羅道-step05 learn

Step05:Mapの出力順に意味はあるか?


📌 まずは問題を見ろ

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


問題のポイント

  • 同じデータを HashMapTreeMap に登録して出力し、順序の違いを確認する
  • HashMap は順序を保証しない
  • TreeMap はキーの自然順(文字列なら辞書順)に並ぶ
  • 「Mapって順番あるの?」という疑問を、動かして確かめる

まず、日本語で考えろ

  • 「日付」と「その日の定食メニュー」をMapに登録する。
  • データは順番バラバラに put する。
  • で、HashMap と TreeMap、それぞれで出力してみる。
  • 同じデータでも、順序は同じか?

コメントを書け

// HashMap にデータを登録して出力
// TreeMap に同じデータを登録して出力
// 出力順の違いを目で確認する

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

import java.util.*;

public class MapUtil {
    public static void compareMapOrder() {
        // データを先に用意
        Map<String, String> data = new HashMap<>();
        data.put("2023-05-03", "Curry");
        data.put("2023-05-01", "Sushi");
        data.put("2023-05-02", "Pasta");

        System.out.println("▼ HashMap の出力");
        // HashMap:順序保証なし
        Map<String, String> hashMap = new HashMap<>(data);
        for (Map.Entry<String, String> entry : hashMap.entrySet()) {
            System.out.println(entry.getKey() + " → " + entry.getValue());
        }

        System.out.println("▼ TreeMap の出力");
        // TreeMap:キーの自然順(辞書順)で並ぶ
        Map<String, String> treeMap = new TreeMap<>(data);
        for (Map.Entry<String, String> entry : treeMap.entrySet()) {
            System.out.println(entry.getKey() + " → " + entry.getValue());
        }
    }
}

実行結果の例(順不同)

▼ HashMap の出力
2023-05-03 → Curry
2023-05-01 → Sushi
2023-05-02 → Pasta

▼ TreeMap の出力
2023-05-01 → Sushi
2023-05-02 → Pasta
2023-05-03 → Curry

コードの解説

  • HashMap は順序を持たない。putの順番やキーの順番とは無関係。
  • TreeMap はキーの自然順(文字列なら辞書順)で保持・出力する。
  • 同じデータを別のMapに渡すことで、出力の違いだけが浮き彫りになる
  • 「順番が大事かどうか」で、使うMapを選べるようにするのが目的。

つまづきやすいポイント

  • HashMap登録順でもソート順でもない → 無秩序に見えるのが正しい挙動。
  • TreeMap を使うには、キーが比較可能であること(Comparable) が前提。
  • データ構造を変えるだけで、出力の見た目や扱いやすさが変わることを体感せよ。

teshのひとこと

「Mapに順番なんてあるわけ…あったわ。」
初学者がよくやる勘違いや。Map = 無秩序だと思ってると、詰む。

順番が意味を持つかどうかは、使う側の意図次第や。
データを管理するってのは、秩序を設計するってことやぞ。


Just keep typing, baby.
順序を設計しろ。おまえのMapに、意味のある並びを与えろ。

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