Collections.emptyList() 返回不可变空列表,适用于无元素的List场景;Collections.emptyMap() 返回不可变空映射,用于无键值对的Map场景。两者均为泛型、线程安全、单例实现,避免null返回和额外开销,选择依据为所需集合类型。

Java 中 Collections.emptyList() 和 Collections.emptyMap() 都是来自 java.util.Collections 工具类的静态方法,用于返回不可变的空集合实例。它们的主要区别在于所表示的集合类型不同,适用场景也不同。
1. 类型和用途不同
• emptyList() 返回一个不可变的空列表(List),适用于需要返回空列表但又不希望被修改的场景。• emptyMap() 返回一个不可变的空映射(
Map),用于表示没有任何键值对的 Map。例如:
立即学习“Java免费学习笔记(深入)”;
• 你有一个方法返回用户列表,如果没有用户,可以返回Collections.emptyList()。• 如果某个配置没有参数,返回一个空的 Map,使用
Collections.emptyMap() 更合适。2. 泛型约束不同
•emptyList() 返回的是 List 类型,可以根据上下文推断泛型类型,比如 List 或 List。•
emptyMap() 返回的是 Map,同样支持泛型,如 Map。示例代码:
List
Map
```
3. 不可变性与线程安全
• 两者返回的对象都是不可变的:不能添加、删除或修改元素。• 因为内部实现是单例模式,多次调用返回的是同一个实例,因此是线程安全的。
• 尝试修改会抛出
UnsupportedOperationException。例如:
立即学习“Java免费学习笔记(深入)”;
```javaList
list.add("test"); // 抛出 UnsupportedOperationException
```
4. 使用建议
• 在定义方法返回值时,如果可能为空,优先返回emptyList() 或 emptyMap() 而不是 null,避免调用方出现空指针异常。• 它们比手动创建 new ArrayList() 或 new HashMap() 更高效,因为是共享的单例实例。
基本上就这些。选择哪个方法取决于你需要的是空列表还是空映射。










