19
4

2 回答 2

43

利用Collections.emptySet():

返回空集(不可变)。这个集合是可序列化的。与同名字段不同,此方法是参数化的。此示例说明了获取空集的类型安全方法:

 Set<String> s = Collections.emptySet();   

实现说明:此方法的实现不需要为每个调用创建单独的 Set 对象。使用此方法的成本可能与使用同名字段的成本相当。(与此方法不同,该字段不提供类型安全。)

于 2012-07-10T13:46:32.317 回答
14

用来null表示一个空集是个坏主意。A 的null行为不像 aSet因为(显然)所有对其执行操作的尝试都会抛出NullPointerException. 这意味着,如果你用它null来表示一个空集,你的代码将充满对null... 的测试,如果你错过了一个,你就有了一个错误。

如果您想要一个不可变的空集,则实际的解决方案是使用,或者如果您想要一个开始为空的可变集,则Collections.emptySet()创建一个适当Set类的实例(例如)。new HashSet<>()


在重读这个问题时,我意识到你的意思可能与我原来的理解不同。

如果您尝试从头开始在 Java 中实现/建模数学集合论概念,您可能会实现Set为不可变类。(在数学中,你不会改变事物!)空集只是一个Set没有元素的实例。无需特殊处理。

这个NULL概念不是必需的……除非你特别想在你的集合数学模型中加入一个“空”、“未定义的集合”或一些类似的概念。(如果您是,我不确定我们是否可以在不了解您的模型的情况下为您提供建议……从数学的角度来看。)

于 2012-07-10T14:53:16.887 回答