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

标签 java list java-9

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 返回的列表是 immutable :

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 返回传递数组的 View ,因此对数组的更改也将反射(reflect)在列表中。对于 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]

关于java - List.of 和 A​​rrays.asList 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46579074/

相关文章:

c# - 修改 List<T> 对象以使用接收 <T> 的方法,反之亦然

list - F# If 语句 List.exists

java - 独立的应用程序,用 Java 构建

docker - 使用 docker 运行 Java 9 应用程序不起作用 - UnsupportedClassVersionError

java - 如何在本地运行代理 'HiveMQ' 并将 android 应用程序连接到它

java - 同步方法的 weakValue 映射引用中的内存泄漏

java - Google map 标记不与列表 <LatLng> 一起显示

java - 如何在rxjava中添加公共(public)观察者

c# - 根据 List<string[]> 中的数组索引查找值

java - JDK9有动态模块发现吗?