Javaで「配列やListを簡単に作りたい」と思ったとき、よく登場するのが次の2つのメソッドです。
- Arrays.asList()
- List.of()
一見するとどちらも「Listを作るメソッド」に見えますが、性質や使いどころは大きく異なります。
この記事では、Java初心者向けにそれぞれの役割と違い、正しい使い分けを解説します。
1. Arrays.asList() とは?
Arrays.asList() は、配列をListとして扱うためのメソッドです。
基本的な使い方
import java.util.Arrays;
import java.util.List;
public class Sample {
public static void main(String[] args) {
List<String> list = Arrays.asList("A", "B", "C");
System.out.println(list);
}
}
出力結果:
[A, B, C]
特徴
- 配列を元にしたList
- Listのサイズは 固定
- 要素の 変更は可能
- Java 5 から存在(古くから使われている)
注意点(重要)
要素の追加・削除はできない
List<String> list = Arrays.asList("A", "B", "C");
list.add("D"); // UnsupportedOperationException
list.remove(0); // UnsupportedOperationException
配列とListが連動する
String[] array = {"A", "B", "C"};
List<String> list = Arrays.asList(array);
array[0] = "X";
System.out.println(list); // [X, B, C]
配列の変更がListにも影響する点は、初心者が非常にハマりやすいポイントです。
2. List.of() とは?
List.of() は、Java 9 から追加された新しいList生成メソッドです。
基本的な使い方
import java.util.List;
public class Sample {
public static void main(String[] args) {
List<String> list = List.of("A", "B", "C");
System.out.println(list);
}
}
特徴
- 完全に変更不可(イミュータブル)
- 要素の追加・削除・変更すべて不可
- 配列との関連なし
- Java 9 以降で使用可能
変更しようとすると…
List<String> list = List.of("A", "B", "C");
list.set(0, "X"); // UnsupportedOperationException
3. Arrays.asList() と List.of() の違いまとめ
| 項目 | Arrays.asList() | List.of() |
|---|---|---|
| Javaバージョン | Java 5〜 | Java 9〜 |
| サイズ変更 | 不可 | 不可 |
| 要素変更 | 可能 | 不可 |
| null要素 | 許可 | NullPointerException |
| 配列との連動 | あり | なし |
| 主な用途 | 配列をListとして扱う | 定数リスト・固定データ |
4. よくある使い分け例
配列をListとして扱いたい場合
String[] data = {"A", "B", "C"};
List<String> list = Arrays.asList(data);
定数として安全に使いたい場合
List<String> roles = List.of("ADMIN", "USER", "GUEST");
要素を追加・削除したい場合(重要)
どちらもサイズ変更不可なので、次のようにします。
import java.util.ArrayList;
import java.util.List;
List<String> list = new ArrayList<>(List.of("A", "B", "C"));
list.add("D"); // OK
5. 初心者向け結論
- Java 9以上を使っているなら、基本は List.of()
- 配列をListとして扱う必要がある場合のみ Arrays.asList()
- 要素を変更したい場合は ArrayList に変換する
6. まとめ
- Arrays.asList() は「配列のラッパー」
- List.of() は「安全な変更不可List」
- 両者は似ているが 設計思想がまったく違う
- 違いを理解すると、例外やバグを防げる
どちらを使うか悩んだら 「変更できるか?できないか?」を常に意識するのがおすすめです。