Arrays.asListとList.ofの違い

Arrays.asListとList.ofの違い

JavaのArrays.asList と List.of は、リストの初期化という点では同じような役割を果たしますが、完全に置き換えることはできないです。
以下にそれぞれの違いを説明します。

Arrays.asList

  • 可変長配列を受け取ってリストを作成する。
  • 作成されたリストは固定サイズで、要素の追加や削除はできないが、既存の要素を変更することは可能です。
  • 例: Arrays.asList("a", "b", "c") はリスト ["a", "b", "c"] を返します。

List.of

  • Java 9以降で利用可能。
  • 不変リストを作成し、作成されたリストは要素の追加、削除、変更ができない。
  • 例: List.of("a", "b", "c") は不変リスト ["a", "b", "c"] を返します。

置き換えが可能な場合

  • リストを作成した後に要素を変更しない場合、Arrays.asList を List.of に置き換えることができます。
// Arrays.asList
List<String> list1 = Arrays.asList("a", "b", "c");

// List.of
List<String> list2 = List.of("a", "b", "c");

置き換えが難しい場合

  • リストの要素を後から変更したい場合は、Arrays.asList を使用する必要があります。

List.of では要素の変更ができないためです。

List<String> list = Arrays.asList("a", "b", "c");
list.set(1, "d"); // これは可能
  • もし不変リストを作成し、後から可変リストに変更したい場合は、次のように Arrays.asList から ArrayList に変換することができます。
List<String> list = new ArrayList<>(List.of("a", "b", "c"));
list.add("d"); // これは可能

結論

上記のように Arrays.asList と List.of はリストの可変・不変という点で異なります。
リストの操作方法に応じて適切なメソッドを選択しましょう。