1. ホーム

[解決済み】List.ofとArrays.asListの違いは何ですか?

2022-04-11 19:56:34

質問

Java 9 では、リストに対する新しいファクトリーメソッドが導入されました。 List.of :

List<String> strings = List.of("first", "second");

前のオプションと新しいオプションの違いは何ですか?つまり、これと何が違うのか。

Arrays.asList(1, 2, 3);

とこれを

List.of(1, 2, 3);

解決方法は?

Arrays.asList が返すリストはミュータブルリストを返しますが List.of 不変 :

List<Integer> list = Arrays.asList(1, 2, null);
list.set(1, 10); // OK

List<Integer> list = List.of(1, 2, 3);
list.set(1, 10); // Fails with UnsupportedOperationException

Arrays.asList はnull要素を許可していますが List.of を使用しない。

List<Integer> list = Arrays.asList(1, 2, null); // OK
List<Integer> list = List.of(1, 2, null); // Fails with NullPointerException

contains はヌルに対して異なる振る舞いをします。

List<Integer> list = Arrays.asList(1, 2, 3);
list.contains(null); // Returns false

List<Integer> list = List.of(1, 2, 3);
list.contains(null); // Fails with NullPointerException

Arrays.asList は渡された配列のビューを返すので、配列への変更はリストにも反映されます。例えば List.of というのは事実ではありません。

Integer[] array = {1,2,3};
List<Integer> list = Arrays.asList(array);
array[1] = 10;
System.out.println(list); // Prints [1, 10, 3]

Integer[] array = {1,2,3};
List<Integer> list = List.of(array);
array[1] = 10;
System.out.println(list); // Prints [1, 2, 3]