17370845950

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

Java 中 Collections.emptyList()Collections.emptyMap() 都是来自 java.util.Collections 工具类的静态方法,用于返回不可变的空集合实例。它们的主要区别在于所表示的集合类型不同,适用场景也不同。

1. 类型和用途不同

emptyList() 返回一个不可变的空列表(List),适用于需要返回空列表但又不希望被修改的场景。
emptyMap() 返回一个不可变的空映射(Map),用于表示没有任何键值对的 Map。

例如:

• 你有一个方法返回用户列表,如果没有用户,可以返回 Collections.emptyList()
• 如果某个配置没有参数,返回一个空的 Map,使用 Collections.emptyMap() 更合适。

2. 泛型约束不同

emptyList() 返回的是 List 类型,可以根据上下文推断泛型类型,比如 ListList
emptyMap() 返回的是 Map,同样支持泛型,如 Map

示例代码:

```java
List emptyList = Collections.emptyList();
Map emptyMap = Collections.emptyMap();
```

3. 不可变性与线程安全

• 两者返回的对象都是不可变的:不能添加、删除或修改元素。
• 因为内部实现是单例模式,多次调用返回的是同一个实例,因此是线程安全的。
• 尝试修改会抛出 UnsupportedOperationException

例如:

```java
List list = Collections.emptyList();
list.add("test"); // 抛出 UnsupportedOperationException
```

4. 使用建议

• 在定义方法返回值时,如果可能为空,优先返回 emptyList()emptyMap() 而不是 null,避免调用方出现空指针异常。
• 它们比手动创建 new ArrayList() 或 new HashMap() 更高效,因为是共享的单例实例。

基本上就这些。选择哪个方法取决于你需要的是空列表还是空映射。