collections.singletonlist 是 java 中创建不可变单元素列表的最轻量方式,返回仅持一个引用、不分配额外数组、线程安全且零拷贝的只读 list,调用 add/remove/set 等方法均抛 unsupportedoperationexception。

Collections.singletonList 是 Java 中创建不可变单元素列表的最简洁方式,返回一个只读的 List,内部实现高效且线程安全。
基本用法:直接传入元素
只需把你要封装的对象传给 singletonList 方法,它会返回一个只含该元素的 List:
- 支持任意类型(包括 null)
- 返回的列表长度固定为 1
- 不能添加、删除、替换元素,否则抛出
UnsupportedOperationException
示例:
List<string> list = Collections.singletonList("hello");</string>
此时 list.size() 是 1,list.get(0) 返回 "hello",调用 list.add("world") 会报错。
适用场景:避免手动 new ArrayList + add
相比手动创建可变列表再添加一个元素,singletonList 更轻量、语义更明确:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不分配多余容量(ArrayList 默认初始容量为 10)
- 明确表达“这个列表就该只有一个值”
- 天然防止误修改,适合配置项、默认值、函数返回值等场景
比如作为方法默认返回值:
return optionalValue.isPresent() ?
Collections.singletonList(optionalValue.get()) :
Collections.emptyList();
注意:返回的是不可变视图,不是新集合
它不是拷贝一份数据,而是包装原始引用。如果原对象本身可变(如 StringBuilder),内容仍可被修改;但列表结构不可变:
- 不能改变列表大小或结构
- 若元素是可变对象,其内部状态仍可变
- 多次调用
singletonList(x)会返回不同对象(不是单例)
替代方案对比
Java 9+ 推荐使用 List.of(element),语法更统一,也返回不可变列表:
-
List.of("a")和Collections.singletonList("a")行为一致 -
List.of()还支持多元素、空列表,API 更现代 - 旧版本 JDK(≤8)只能用
singletonList
所以,JDK 8 及以下优先用 Collections.singletonList;JDK 9+ 可按团队规范选择,两者都合理。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










