collections.singletonlist() 是 java 中最轻量级的单元素不可变列表创建方式,不复制元素、不分配额外数组,返回线程安全、零拷贝、内存友好的只读视图。

Collections.singletonList() 是 Java 提供的最轻量级、开销最小的单元素不可变列表创建方式,它不复制元素、不分配额外数组(内部直接复用一个静态 final 数组),返回的是一个高度优化的只读视图。
核心特性与使用姿势
该方法返回一个 List<t></t> 实例,具备以下关键性质:
- 线程安全:内部状态不可变,无需额外同步
- 零拷贝:元素直接引用传入对象,不 clone、不封装
- 内存友好:JDK 内部使用共享的
Object[]单元数组,无冗余对象分配 - 严格不可变:调用
add、set、clear等任何修改方法均抛出UnsupportedOperationException
基础用法示例
直接传入任意非 null 或 null 元素即可(支持 null):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
String only = "hello";
List<string> single = Collections.singletonList(only); // 类型推断自动生效
System.out.println(single.get(0)); // hello
System.out.println(single.size()); // 1
// single.add("world"); // 运行时抛出 UnsupportedOperationException</string>
适用场景与注意事项
适合用于函数式编程中快速构造“临时单值容器”,常见于:
- 作为方法返回值(替代 new ArrayList(Collections.singleton(...)))
- Stream.collect() 的下游收集器(如
Collectors.collectingAndThen(..., Collections::singletonList)) - 构建 Map 的 value(如
Map.of("key", Collections.singletonList("value")))
⚠️ 注意:它不是“不可变对象”的保证——若元素本身可变(如 StringBuilder),其内容仍可被修改;不可变的是列表结构本身,而非其中元素的状态。
对比其他单元素构造方式
相比替代方案,singletonList 更高效简洁:
-
Arrays.asList("x"):返回的也是不可变列表,但每次调用都新建ArrayList子类实例,有轻微对象开销 -
ImmutableList.of("x")(Guava):功能更强但引入外部依赖,且构造成本略高 -
List.of("x")(Java 9+):语法更简洁,底层也高度优化,但singletonList在 Java 5+ 就存在,兼容性更广
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










