Collections.emptyXXX方法返回不可变的空集合单例,避免内存浪费和修改风险。①用于List、Set、Map类型;②推荐泛型声明保证类型安全;③适用于默认返回值场景;④相比new ArrayList()更高效且线程安全;⑤禁止修改操作,否则抛异常。
在Java中,Collections.emptyXXX 方法提供了一种高效、安全的方式来创建不可变的空集合。这些方法属于 java.util.Collections 工具类,适用于 List、Set、Map 等常见集合类型。使用它们可以避免手动创建空集合时可能出现的 NullPointerException 或意外修改的问题。
这三个方法分别用于返回空的不可变列表、集合和映射:
Collections.emptyList():返回一个空的、不可变的 ListCollections.emptySet():返回一个空的、不可变的 SetCollections.
emptyMap():返回一个空的、不可变的 Map示例代码:
import java.util.*; ListemptyList = Collections.emptyList(); Set emptySet = Collections.emptySet(); Map emptyMap = Collections.emptyMap();
这些集合是全局共享的单例实例,不会分配多余内存,性能更优。
直接调用 emptyXXX() 可能导致泛型警告。推荐通过显式声明类型或使用泛型方法来保证类型安全。
更好的做法是结合泛型声明:
// 推荐写法:指定泛型 Listlist = Collections. emptyList(); Set set = Collections. emptySet(); Map map = Collections. emptyMap();
从 Java 7 开始支持菱形操作符,也可以让编译器自动推断:
Listlist = Collections.emptyList(); // 编译器可推断
这些空集合常用于以下场景:
例如:
public ListfindUsersByRole(String role) { if (role == null || !validRoles.contains(role)) { return Collections.emptyList(); // 安全返回空集合 } // 查询逻辑... }
这样调用方无需判空,可以直接遍历,减少出错概率。
相比 new ArrayList(),使用 emptyXXX() 有明显优势:
UnsupportedOperationException
注意:如果需要后续添加元素,应使用 new ArrayList() 而非 empty 方法。
基本上就这些。合理使用 Collections.emptyXXX 能提升代码健壮性和性能,尤其适合作为 API 返回值的“空”兜底方案。