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()行为一致)
  • 特性:
    • 通过Collectors工具类收集流元素,需要配合collect()方法使用
    • 早期版本中允许null元素,Java 16+ 后禁止null元素
    • 规范中未严格规定返回的具体列表类型(可能是ArrayList或其他实现)
Collectors.toCollection()
  • 支持版本:Java 8 及以上
  • 可变性:完全可变(由指定的集合类型决定)
  • 特性:
    • 最灵活的流式收集方式,可指定具体的列表实现类
    • 支持任何Collection的实现类(包括ArrayListLinkedList等)
示例
java 复制代码
// 创建 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));  
相关推荐
NAGNIP1 小时前
一文搞懂机器学习中的特征降维!
算法·面试
NAGNIP1 小时前
一文搞懂机器学习中的特征构造!
算法·面试
毕设源码-郭学长2 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
故事不长丨2 小时前
C#正则表达式完全攻略:从基础到实战的全场景应用指南
开发语言·正则表达式·c#·regex
梨落秋霜2 小时前
Python入门篇【文件处理】
android·java·python
Java 码农2 小时前
RabbitMQ集群部署方案及配置指南03
java·python·rabbitmq
Learn Beyond Limits2 小时前
解构语义:从词向量到神经分类|Decoding Semantics: Word Vectors and Neural Classification
人工智能·算法·机器学习·ai·分类·数据挖掘·nlp
哈库纳玛塔塔2 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
你怎么知道我是队长2 小时前
C语言---typedef
c语言·c++·算法
phltxy3 小时前
从零入门JavaScript:基础语法全解析
开发语言·javascript