推荐用 Collections.emptyList() 而非 new ArrayList(),因其返回全局复用的不可变单例,节省内存且语义清晰;需显式指定泛型以保障类型安全,调用修改方法会抛 UnsupportedOperationException。

Collections.emptyList() 是 Java 中创建不可变空 List 的标准方式,返回一个类型安全、共享的、只读的空列表实例。
为什么推荐用 emptyList() 而不是 new ArrayList()?
它返回的是一个全局复用的单例对象(JDK 内部优化),不分配新内存;同时明确表达“此处不需要可变集合”的语义。而 new ArrayList() 每次都新建对象,且后续可能被意外修改。
如何正确使用并指定泛型类型
必须显式指定泛型参数(尤其在方法返回或赋值时),否则编译器可能推断为 Object 或报错:
- ✅ 推荐写法(显式泛型):
List<string> list = Collections.<string>emptyList();</string></string> - ✅ Java 7+ 可简写为:
List<string> list = Collections.emptyList();</string>(编译器通常能从左侧类型推断) - ❌ 错误写法(丢失类型):
List list = Collections.emptyList();(原始类型,不安全)
它返回的列表有哪些限制?
该列表是不可变的,任何修改操作都会抛出 UnsupportedOperationException:
- 不能调用
add()、remove()、clear()、set()等方法 - 可以安全调用
size()(返回 0)、isEmpty()(返回 true)、contains()(返回 false)、iterator()(返回空迭代器)等只读方法 - 适用于 API 返回值、默认配置、条件分支中的空结果占位等场景
和其他空集合工具对比
类似地,还有:Collections.emptySet()(空不可变 Set)、Collections.emptyMap()(空不可变 Map)——用法和注意事项一致。
注意:它们都不接受 null 元素(但空集合本身允许)。

















