イミュータブルコレクション(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"); // 実行時エラー
}
}
Java2. 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
Java3. 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 返却に最適。
👉 練習課題として「曜日の不変リストを作り、入力された文字列が平日かどうか判定する」プログラムを書いてみると、イミュータブルコレクションの便利さが体感できます。
