【问题标题】:Java Collection Framework Set compared to mathematical Set?Java集合框架集与数学集相比?
【发布时间】:2017-11-26 22:39:03
【问题描述】:

我正在学习 Java 集合框架,并且同样关注 JDK 文档。我感到困惑的一个特殊概念是Set 接口。

我知道Set 不允许插入重复的元素。

我的问题是,Java 集合框架 Set 接口无论如何都是数学 Set 的表示?

【问题讨论】:

  • 请注意,Set 确实“允许”插入重复元素(它不会引发异常);该元素根本不会存储在集合中,因为已经存在等效对象。

标签: java collections set


【解决方案1】:

Set 的集合框架版本是有限数学集(尽管不是无限集)的合理诚实表示。一个项目只能在给定集合中出现一次的要求与set theory一致。

允许多次使用同一项目的数学构造是multi-set,而不是集合。

【讨论】:

  • Nitpick: A Set 可以包含对同一元素的多个引用,如果这些元素(故意)错误地实现了 hashcodeequals 方法,或者如果元素是可变的。
  • @tobias_k 我认为忽略诸如故意违反hashCodeequals 合同的类之类的极端情况可能适合讨论这一级别,不是吗?
  • 好吧,我说这是个吹毛求疵,但我认为值得一提。毕竟,也可以例如如果该列表在两者之间被修改,则最终会得到对同一列表的两个引用。
【解决方案2】:

是Java集合框架Set接口的一种表现形式 无论如何设置数学?

是的,Set 接口对数学集抽象建模。以下方法可用于执行一些常见的Set 操作。

addAll(Collection<? extends E> c)(设置联合)

retainAll(Collection<?> c)(设置交点)

removeAll(Collection<?> c)(设置差异)

【讨论】:

  • 感谢您的回答;那么这是否意味着它将支持数学运算,例如:n(AUB)等?我不清楚为什么需要 Set 。你能帮忙理解一下吗?
  • @CuriousMind 是的,您可以通过在 java 中执行 set1.addAll(set2). 来执行 (AUB),您主要想使用 Set 来禁止重复,但还有其他好处。
  • 一个关键的好处是确定一个对象是否在一个集合中的成本很低(通常是 O(1))——这个操作使用集合比使用列表快得多。另一个是当顺序在语义上不相关时,例如表达“这些都是我在工作中认识的人”的概念。另一个是使用枚举集作为基于 int 的标志的替代方法的 Java 习惯用法。 (这很常见,它有自己的支持类:java.util.EnumSet)
猜你喜欢
  • 2014-05-19
  • 1970-01-01
  • 2011-08-23
  • 2011-03-31
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多