如何实现空集 - ∅?

25
假设您想在Java中实现集合论概念,例如elementsetcollectionrelation:那么您将如何表示 空集
如果我认为数据库的三值逻辑中使用的NULL概念就是它本身,那么我会被误导吗?

4
我不确定这个问题是否有唯一的答案,它取决于你想要达到什么目的。显而易见的答案是“使用一个空的Set”,但是根据你正在做的事情,NULL也可能是合适的。 - Oliver Charlesworth
4
表示空集合有许多种方式,具体取决于应用场景。Set<E> = new HashSet<E>() 是其中最简单的一种。 - Fred Foo
4
我想到了 Collections.emptySet() ... - Sean Patrick Floyd
1
@OliCharlesworth:我认为没有集合(你有零个集合)和空集合(你有零个元素的集合)是不同的。 - Lukas Eder
@TonyEnnis:一个例子是惰性初始化。缺少设置意味着它尚未初始化。 - Lukas Eder
显示剩余7条评论
2个回答

52

使用Collections.emptySet()

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

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

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


谢谢您的建议。我会采纳您的建议。 - M4TT4CK

16
使用null来代表空集合是一个不好的主意。因为null并不像Set那样,所有对其进行的操作都会抛出NullPointerException异常。这意味着,如果你使用null表示空集合,你的代码将充斥着对null的测试... 如果你错过了一个测试,就会出现错误。
解决方案是,如果您想要一个不可变的空集,请使用Collections.emptySet(),如果您想要一个可变的空集,请创建适当的Set类实例(例如new HashSet<>())。
如果您尝试从头开始在Java中实现/建模数学集合理论概念,则可能将 Set 实现为一个不可变类。 (在数学中,您不会突变事物!)然后,空集只是一个没有元素的Set实例。不需要特殊处理。 NULL的概念不是必需的...除非您特别想在集合的数学模型中纳入“null”、“未定义集合”或某些类似的概念。(如果是这样,我们无法在不了解您的模型的情况下提供建议...从数学的角度来看。)

+1 是因为 null 不是一个好的选择。 - Tony Ennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接