【问题标题】:How to implement the empty set - ∅? [closed]如何实现空集-∅? [关闭]
【发布时间】:2012-07-10 13:34:02
【问题描述】:

假设您想在 Java 中实现集合论概念,例如 elementsetcollectionrelation:您将如何表示 空集

如果我认为NULL 概念被数据库的三值逻辑所使用,我会不会误导自己?

【问题讨论】:

  • 我不确定这个问题是否有独特的答案;这取决于你想要达到的目标。显而易见的答案是“使用空的Set”,但NULL 也可能是合适的,这取决于你在做什么。
  • 有无数种方法来表示空集,具体取决于预期的应用程序。 Set<E> = new HashSet<E>() 是最简单的一种。
  • Collections.emptySet() 浮现在脑海中......
  • @OliCharlesworth:我想说没有集合(你有零个集合)和一个空集(你有一个零元素的集合)是不一样的
  • 没有内容的 Set 对我有用。我不会在 Java 中将它表示为 null。这可能有一些逻辑,但代码会很烦人,因为每次引用集合时都必须检查 null。

标签: java null set-theory


【解决方案1】:

使用Collections.emptySet():

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

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

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

【讨论】:

  • 感谢您的建议。我会采纳你的建议。
【解决方案2】:

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

如果你想要一个不可变的空集,实际的解决方案是使用Collections.emptySet(),或者如果你想要一个以空开头的可变集,则创建一个适当的Set 类的实例(例如new HashSet&lt;&gt;())。


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

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

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

【讨论】:

  • +1 用于说明为什么 null 是一个坏主意。
猜你喜欢
  • 2018-05-08
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
相关资源
最近更新 更多