102 「Map修羅道」 Step02 解答例

MapUtil.java

import java.util.HashMap;
import java.util.Map;

public class MapUtil {
    public static void printDepartments() {
        // 社員番号と部署名を記録するMapを作成
        Map<Integer, String> departmentMap = new HashMap<>();

        // データを登録
        departmentMap.put(2001, "Sales");
        departmentMap.put(2002, "HR");
        departmentMap.put(2003, "Engineering");

        // ---- keySet() を使ったループ ----
        System.out.println("=== keySet() を使った出力 ===");
        for (Integer empId : departmentMap.keySet()) {
            // key(社員番号)から value(部署名)を取得する
            String department = departmentMap.get(empId);
            System.out.println(empId + " → " + department);
        }

        // ---- entrySet() を使ったループ ----
        System.out.println("=== entrySet() を使った出力 ===");
        for (Map.Entry<Integer, String> entry : departmentMap.entrySet()) {
            // entry から key と value を同時に取り出す
            Integer empId = entry.getKey();
            String department = entry.getValue();
            System.out.println(empId + " → " + department);
        }
    }
}

解説:Mapをループで出力する2つの方法

JavaのMapをループで出力するには、主に以下の2通りの方法があります。


方法①:keySet() を使う

for (Integer key : map.keySet()) {
    String value = map.get(key);
    System.out.println(key + " → " + value);
}
  • keySet() はすべてのキーを取得できる
  • キーから値を取得するために map.get(key) を毎回呼び出す必要がある
  • 単純だが、Mapが大きくなるとパフォーマンス面でやや不利

方法②:entrySet() を使う

for (Map.Entry<Integer, String> entry : map.entrySet()) {
    Integer key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " → " + value);
}
  • entrySet() はキーと値のペア(Entry)を一括で扱える
  • getKey()getValue() を使ってそれぞれ取得
  • Mapの中身をすべて処理する場面では推奨される方法

実行結果の例(順不同):

=== keySet() を使った出力 ===
2001 → Sales
2002 → HR
2003 → Engineering

=== entrySet() を使った出力 ===
2001 → Sales
2002 → HR
2003 → Engineering

※ HashMap は順序を保証しないため、出力順は実行環境により異なる可能性があります。


まとめ:このステップで学ぶべきこと

  • Mapをループ処理する際の2通りの方法を体得する
  • keySet()は構造がシンプル、entrySet()は効率的
  • 実用上は entrySet() が推奨されるシーンが多い

102 ステップアップ問題 「Map修羅道」