在Java的集合框架中,Collections工具类提供了多个用于创建空集合的静态方法,其中emptyList和emptySet是最常用的两个。这两个方法可以返回对应类型的不可变空集合实例,在很多场景下能替代手动创建空集合的操作,减少不必要的对象创建开销。

Collections.emptyList和emptySet的基本用法
这两个方法的使用非常简单,直接通过Collections类调用即可,不需要额外传入参数,返回的集合都是不可变的空集合实例。下面是基础的使用示例:
import java.util.Collections;
import java.util.List;
import java.util.Set;
public class EmptyCollectionDemo {
public static void main(String[] args) {
// 创建空List
List<String> emptyList = Collections.emptyList();
System.out.println("空List大小:" + emptyList.size()); // 输出 0
// 创建空Set
Set<Integer> emptySet = Collections.emptySet();
System.out.println("空Set大小:" + emptySet.size()); // 输出 0
}
}
两个方法的特性说明
不可变性
emptyList和emptySet返回的集合都是不可变的,也就是说不能对这个集合进行添加、删除、修改元素的操作,否则会抛出UnsupportedOperationException。下面的代码会触发异常:
import java.util.Collections;
import java.util.List;
public class EmptyCollectionModifyDemo {
public static void main(String[] args) {
List<String> emptyList = Collections.emptyList();
// 尝试添加元素,会抛出异常
emptyList.add("test"); // 运行时抛出 UnsupportedOperationException
}
}
单例特性
这两个方法每次调用返回的都是同一个不可变空集合实例,不会每次都创建新的对象。这种单例设计可以减少内存占用,适合频繁需要空集合的场景。可以通过判断对象地址来验证这一点:
import java.util.Collections;
import java.util.List;
public class EmptyCollectionSingletonDemo {
public static void main(String[] args) {
List<String> list1 = Collections.emptyList();
List<String> list2 = Collections.emptyList();
// 输出 true,说明两个引用指向同一个对象
System.out.println(list1 == list2);
}
}
和手动创建空集合的区别
很多开发者习惯用new ArrayList<>()或者new HashSet<>()的方式创建空集合,这两种方式有明显区别:
| 对比项 | Collections.emptyList/emptySet | new ArrayList<>()/new HashSet<>() |
|---|---|---|
| 可变性 | 不可变,不支持增删改 | 可变,支持增删改 |
| 对象创建 | 返回单例实例,不重复创建 | 每次调用创建新的集合对象 |
| 适用场景 | 仅需要返回空集合,不需要修改的场景 | 后续需要向集合中添加元素的场景 |
适用场景说明
emptyList和emptySet适合用在以下场景:
- 方法返回集合类型时,如果没有结果需要返回,返回空集合而不是null,避免调用方出现空指针异常
- 作为方法的默认参数,不需要修改的空集合场景
- 需要频繁使用空集合,且不需要修改的场景,减少对象创建开销
如果后续需要向集合中添加元素,就不能使用这两个方法,而是应该手动创建可变的集合实例,比如new ArrayList<>()。
注意事项
使用这两个方法时需要注意两点:首先不要尝试修改返回的集合,否则会抛出运行时异常;其次如果需要存储泛型类型的空集合,不需要额外做泛型转换,方法本身支持泛型推导,直接赋值给对应泛型类型的变量即可。
注意:如果需要可变的空集合,不要使用Collections.emptyList或者emptySet,应该选择对应的具体实现类的构造方法创建实例。
JavaCollectionsemptyListemptySet空集合修改时间:2026-07-15 20:36:23