Java List列表创建方法大总结
不可变列表创建
单元素不可变列表
- Collections.singletonList()
- 支持版本:Java 1.3 及以上
- 不可变性:完全不可变,不支持任何修改操作
多元素不可变列表
-
List.of()
- 支持版本:Java 9 及以上
- 不可变性:完全不可变,不支持任何修改操作
- 不允许
null
元素
-
Collections.unmodifiableList()
- 支持版本:Java 1.2 及以上
- 不可变性:包装后的列表不可修改,但底层列表可通过原引用修改
-
Arrays.asList()
- 支持版本:Java 1.2 及以上
- 可变性:特殊的半可变列表(支持
set()
修改元素,但不支持add()
/remove()
)
-
List.copyOf()
- 支持版本:Java 10 及以上
- 不可变性:返回不可变列表(与
List.of()
特性一致) - 特点:基于源列表创建不可变副本,若源列表本身是不可变的,可能返回源列表本身以节省空间
-
Stream.toList()
- 支持版本:Java 16 及以上
- 不可变性:返回不可变列表
- 特点:适用于流式 API,不允许
null
元素(添加null
会抛出NullPointerException
)
可变列表创建
new ArrayList<>()
- 支持版本:Java 1.2 及以上(泛型版本 Java 5 及以上)
- 可变性:完全可变,支持所有修改操作
new LinkedList<>()
- 支持版本:Java 1.2 及以上(泛型版本 Java 5 及以上)
- 可变性:完全可变,支持所有修改操作
Collectors.toList()
- 支持版本:Java 8+
- 可变性:
- Java 8-10:返回可变列表(通常是
ArrayList
) - Java 16+:返回不可变列表(与
List.of()
行为一致)
- Java 8-10:返回可变列表(通常是
- 特性:
- 通过
Collectors
工具类收集流元素,需要配合collect()
方法使用 - 早期版本中允许
null
元素,Java 16+ 后禁止null
元素 - 规范中未严格规定返回的具体列表类型(可能是
ArrayList
或其他实现)
- 通过
Collectors.toCollection()
- 支持版本:Java 8 及以上
- 可变性:完全可变(由指定的集合类型决定)
- 特性:
- 最灵活的流式收集方式,可指定具体的列表实现类
- 支持任何
Collection
的实现类(包括ArrayList
、LinkedList
等)
示例
// 创建 ArrayList
List<String> arrayList = Stream.of("a", "b") .collect(Collectors.toCollection(ArrayList::new)); // 创建 LinkedList
List<Integer> linkedList = Stream.of(1, 2, 3) .collect(Collectors.toCollection(LinkedList::new));