Java 逆引き集 | イミュータブルコレクション(List.of, Map.of) — 不変の集合

Java Java
スポンサーリンク

イミュータブルコレクション(List.of, Map.of) — 不変の集合

Java 9 以降では、List.of, Set.of, Map.of などの イミュータブル(不変)コレクション を簡単に作れるようになりました。
「不変」とは 一度作ったら変更できない という意味です。初心者向けに、コード例とテンプレートを交えて解説します。


特徴

  • 変更不可: 要素の追加・削除・更新はできない。
  • 安全性: 外部に返すときに「勝手に書き換えられない」ので API 設計に便利。
  • 軽量: Collections.unmodifiableList よりも効率的に作られる。
  • 用途: 定数データ、設定値、読み取り専用の一覧。

基本コード例

1. List.of

import java.util.List;

public class ImmutableListDemo {
    public static void main(String[] args) {
        List<String> fruits = List.of("Apple", "Banana", "Cherry");

        System.out.println(fruits); // [Apple, Banana, Cherry]

        // 変更は例外(UnsupportedOperationException)
        // fruits.add("Orange"); // 実行時エラー
    }
}
Java

2. Set.of

import java.util.Set;

Set<String> colors = Set.of("Red", "Green", "Blue");
System.out.println(colors); // [Red, Green, Blue]

// 重複要素はエラー
// Set.of("A", "A"); // IllegalArgumentException
Java

3. Map.of

import java.util.Map;

Map<String, Integer> ages = Map.of(
    "Tanaka", 30,
    "Sato", 25,
    "Suzuki", 28
);

System.out.println(ages); // {Tanaka=30, Sato=25, Suzuki=28}

// 変更不可
// ages.put("Kato", 40); // 実行時エラー
Java

特性まとめ

メソッド特徴
List.of不変リスト。順序保持。重複可。
Set.of不変セット。順序保証なし。重複不可。
Map.of不変マップ。キー重複不可。

例題で練習

例題1: 定数データの管理

List<String> weekdays = List.of("Mon", "Tue", "Wed", "Thu", "Fri");
System.out.println("平日: " + weekdays);
Java

例題2: 設定値の公開(API返却)

public class Config {
    private static final Map<String, String> SETTINGS =
        Map.of("version", "1.0", "env", "production");

    public Map<String, String> getSettings() {
        return SETTINGS; // 不変なので安全に返せる
    }
}
Java

例題3: 定数集合で条件判定

Set<String> vowels = Set.of("A", "E", "I", "O", "U");

String ch = "E";
if (vowels.contains(ch)) {
    System.out.println(ch + " は母音です");
}
Java

テンプレート集

不変リスト

List<Type> list = List.of(val1, val2, val3);
Java

不変セット

Set<Type> set = Set.of(val1, val2, val3);
Java

不変マップ

Map<KeyType, ValueType> map = Map.of(
    key1, val1,
    key2, val2,
    key3, val3
);
Java

実務でのコツ

  • 返却用に便利: API やメソッドで返すときに「変更不可」にできる。
  • 定数管理: 設定値や固定データを簡潔に書ける。
  • エラー防止: 誤って変更しようとすると例外が出るのでバグを早期発見できる。
  • 大量要素: 10個以上の要素を扱う場合は Map.ofEntries を使うと読みやすい。
Map<String, Integer> bigMap = Map.ofEntries(
    Map.entry("A", 1),
    Map.entry("B", 2),
    Map.entry("C", 3)
);
Java

まとめ

  • List.of / Set.of / Map.of は Java 9 以降の不変コレクション生成メソッド。
  • 変更不可なので安全性が高い。
  • 定数データや API 返却に最適。

👉 練習課題として「曜日の不変リストを作り、入力された文字列が平日かどうか判定する」プログラムを書いてみると、イミュータブルコレクションの便利さが体感できます。

タイトルとURLをコピーしました