Step05:Mapの出力順に意味はあるか?
📌 まずは問題を見ろ
→ javadrill.tech で出題された問題を見る(Step05)
問題のポイント
- 同じデータを
HashMap
とTreeMap
に登録して出力し、順序の違いを確認する 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に、意味のある並びを与えろ。