如何实现空集 - ∅?[已关闭]

2022-09-02 05:15:07

假设你想实现集合论概念,如、、和Java:你将如何表示空集elementsetcollectionrelation

如果我想到这个概念,因为它被数据库的三值逻辑所使用,我是否误导了自己?NULL


答案 1

Use Collections.emptySet():

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

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

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


答案 2

使用来表示空集是一个坏主意。A 的行为不像 a,因为(显然)所有对其执行操作的尝试都会抛出 .这意味着,如果您用于表示空集,则代码将充斥着...如果你错过了一个,你有一个错误。nullnullSetNullPointerExceptionnullnull

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


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

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

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