小编典典

List.of 和 A​​rrays.asList 有什么区别?

all

Java 9
为列表引入了新的工厂方法List.of

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

以前的选项和新的选项有什么区别?也就是说,这之间有什么区别:

Arrays.asList(1, 2, 3);

和这个:

List.of(1, 2, 3);

阅读 71

收藏
2022-06-09

共1个答案

小编典典

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允许空元素,而List.of不允许:

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

contains使用 null 时的行为不同:

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]
2022-06-09