Java Collections.emptySet() 方法

2025年3月21日 | 阅读 4 分钟

Java Collections 类的 emptySet() 方法用于获取一个不包含任何元素的 Set。这些空 Set 本质上是不可变的。

语法

以下是 emptySet() 方法的声明

参数

此方法不接受任何参数。

返回值

emptySet() 方法返回一个空的不可变 Set。

异常

不适用

兼容版本

Java 1.5 及以上版本

示例 1

文件名: CollectionsEmptySetExample1.java

输出

Empty Set: []

Collections.emptySet() 返回一个类型为 Set<String> 的不可变空 Set (Collections.EMPTY_SET)。该空 Set 无法被修改;任何尝试添加、删除或修改元素的行为都将导致 UnsupportedOperationException。打印 emptySet 会显示一个空集合 ([]), 表明其不可变和空的状态。

示例 2

文件名: CollectionsEmptySetExample2.java

输出

Created empty immutable Set: []
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.base/java.util.AbstractCollection.add(AbstractCollection.java:267)
	at myPackage.CollectionsEmptySetExample2.main(CollectionsEmptySetExample2.java:10)

示例 3

文件名: CollectionsEmptySetExample2.java

输出

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.base/java.util.AbstractCollection.add(AbstractCollection.java:267)
	at myPackage.CollectionsEmptySetExample3.main(CollectionsEmptySetExample3.java:8)

获取 Object 类型的空 Set 示例

在 Java 中,Collections 类提供了一种便捷的方式,通过 emptySet() 方法来获取一个不可变的空对象 Set。该方法返回一个保证为空且不可变的 Set,意味着它在创建后无法被修改。

文件名: EmptyObjectSetExample.java

输出

Size of empty object set: 0
After clear operation, size of empty object set: 0
Class of empty object set: java.util.Collections$EmptySet

Collections.emptySet() 方法的优点

  1. 不可变空 Set: Collections.emptySet() 返回一个不可变的(只读)空 Set。它确保 Set 无法被修改,提供了线程安全并防止意外更改。
  2. 避免 NullPointerException: 它消除了在返回空 Set 时进行 null 检查的需要。与返回 null(需要客户端代码进行额外的检查)不同,可以使用 Collections.emptySet() 返回一个空 Set。
  3. 方便易读: 使用 Collections.emptySet() 提供了一种清晰简洁的方式来获取空 Set 实例。它提高了代码的可读性,并明确了返回空 Set 的意图。
  4. 性能优势: 创建并返回一个单例空 Set 实例(Collections.emptySet())比每次需要时都创建新的空 Set 更高效。这是因为不可变对象可以被缓存和重用。
  5. 线程安全: 由于 Collections.emptySet() 返回的 Set 是不可变的,因此可以在多线程环境中安全地访问和使用它,而无需进行同步。

Collections.emptySet() 方法的缺点

  1. 无法修改: Collections.emptySet() 返回的 Set 是不可变的。虽然这通常是线程安全和清晰度的优势,但它意味着您不能在 Set 中添加、删除或更改元素。任何尝试修改 Set 的行为都将导致 UnsupportedOperationException。
  2. 用例有限: 它只能用于创建空 Set,而不能用于创建带有初始元素的 Set。如果您需要一个带有元素的 Set,则需要使用 HashSet 或 TreeSet 等其他方法。
  3. 可能引起混淆: 不熟悉该方法的开发者可能不会立即识别其不可变性。如果他们尝试修改返回的 Set 并遇到意外的 UnsupportedOperationExceptions,这可能会导致混淆。