List.of()List.of() 与 Arrays.asList() 是 Java 中用于创建列表的两种不同方法。
1.List.of()
(1)不可变性和个数限制
是Java9中引入的一个新方法,用于创建不可变的列表对象,这意味着一旦创建,就不能增删改其中的元素。需要注意,元素个数过大会影响性能,一般元素个数控制在10以内。
(2)线程安全
不可变性在多线程环境下非常有用,可以避免并发访问带来的问题。
(3)不可添加null元素
List.of()不可添加空元素(null),否则会抛出NullPointerException异常
(4)支持泛型
List.of()支持泛型,可以创建包含特定类型元素的列表
(5)返回类型
List.of()的返回类型是List接口的一个实现,不是ArrayList或其他特定类型
List<Integer> list = List.of(1, 2, 3);
2.Arrays.asList()
(1)基于数组
可用于将数组转变为列表。它的底层数据结构仍然是数组,因此它具有数组的一些特性,如固定长度。
并且Arrays.asList() 返回的列表与原始数组关联,这意味着对列表的更改也会反映在原始数组中。例如,如果你修改列表中的元素,原始数组也会被修改。
(2)可变性
创建的列表是可变的,这意味着你可以使用 add() 或 remove() 方法来修改列表中的元素。但需要注意的是,如果尝试调用 add() 或 remove() 来更改数组大小,会引发 UnsupportedOperationException 异常,因为底层数组的大小是不可变的。
(3)允许空元素
与 List.of() 不同,Arrays.asList() 允许添加空元素(null)。这是因为它仅是将现有数组包装为列表,而不会在添加元素时执行额外的检查。
(4)返回类型
Arrays.asList()的返回的类型是List接口的一个实现,但它的具体实现类是 ArrayList。这是因为它是基于数组的,同时也提供了列表接口的功能。
(5)线程安全
在多线程环境中需要进行同步处理,以避免并发问题。
Integer[] a = {11, 22, 33};
List<Integer> list1 = Arrays.asList(a);
List<String> list2 = Arrays.asList("Red", null, "Blue");