自分用にList.of()メソッドとArrays.asList()メソッドの違いについてまとめていきたいと思います。
List<Integer> number = new ArrayList<>(Arrays.asList(A, B, C));
と
List<Integer> number = new ArrayList<>(List.of(A, B, C));
上記の2つのコードは、両方とも要素がA、B、CであるArrayListを生成するための方法ですが、いくつかの違いがあります。
①可変か不可変か
・Arrays.asList() メソッドは、引数として渡された配列要素を含む可変長引数リストを返します。
・ist.of() メソッドは、不変のリストを返します。
つまり、List.of() メソッドは、返されたリストを変更しようとするとUnsupportedOperationExceptionがスローされる可能性があります。
一方、Arrays.asList() メソッドで作成されたリストは、変更が可能であり、要素を追加、変更、削除することができます。
②要素の数の制限
・Arrays.asList()もList.of() メソッドも、引数として指定された要素の数に制限があります。
最大で255個の引数を受け取ることができます。
ただし、配列を引数で渡す場合はこの限りではありません。
③要素の変更・追加・削除
・Arrays.asList()で作成されたリストは固定長配列のビューであるため、要素の変更はできますが、追加や削除はできません。
・List.of()で作成されたリストは不変であるため、要素の変更、追加、削除はできません。
Integer A = 1, B = 2, C = 3;
// Arrays.asList()で作成されたリスト
List<Integer> number1 = new ArrayList<>(Arrays.asList(A, B, C));
number1.set(2, 4); //要素の変更は可能
number1.add(5); //要素の追加はできない(UnsupportedOperationExceptionがスローされる)
// List.of()で作成されたリスト
List<Integer> number2 = new ArrayList<>(List.of(A, B, C));
number2.set(2, 4); //要素の変更はできない(UnsupportedOperationExceptionがスローされる)
number2.add(5); //要素の追加はできない(UnsupportedOperationExceptionがスローされる)
④まとめ
簡潔ですがList.of()メソッドとArrays.asList()メソッドの違いについてまとめてみました。
何か間違いや気になる点があればご指摘いただけると幸いです。