【问题标题】:Why java.util.BitSet does not implement java.util.Set为什么 java.util.BitSet 不实现 java.util.Set
【发布时间】:2017-02-09 04:08:33
【问题描述】:

为什么java.util.BitSet 没有实现java.util.Set<Integer> 接口。尤其是当它可以很容易地做到这一点时。此外,BitSet 用于维护整数是否“打开或未打开”,Set 也完全相同。所以BitSetSet<Integer>。参考一些cmets说

现在看看BitSet的方法。该类的目的是对按特定顺序排列的位集合执行逻辑操作。

我仍然会说BitSet 是一个Set<Integer>,它还提供了额外的操作集。

【问题讨论】:

  • @f1sh 我确定我去过有争议的餐饮场所。
  • @djaqeel 你没有让 AndyTurner 的评论无关紧要,但我的。至少它的第二部分。但是现在你只是告诉每个人你编辑了你的问题,让它再次相关,耶!我评论的第一部分仍然是我的最终答案。
  • BitSet 是位向量,而 Set 是非重复对象的通用集合。声明“他们的行为不同,服务完全不同的目的。”从上面的热狗评论中总结得很好。
  • @djaqeel 我认为是出于性能原因。他们不希望人们通过通用接口使用这个实现(这基本上是一种优化),它会破坏使用它的好处。如有必要,可以在其周围编写一个包装器。
  • 评论说“位向量”和“集合”是不同的,所以BitSet 不应该实现Set,现在我们有了EnumSet,它基本上和@987654332做同样的事情@ 但它仍然实现了Set...

标签: java set bitset


【解决方案1】:

由于 cmets 不够明显:

你说“BitSet 实际上是一个有效的集合。BitSet 是一个集合”——不,它不是。 Set 是一个不包含重复元素的集合。

现在想象一个Set<Bit>。由于一个位只能是 1 或 0,这将是一个非常无聊的最大大小为 2 的集合。

现在看看the methods of BitSet。该类的目的是对按特定顺序排列的位集合执行逻辑操作。这与Set 无关。

【讨论】:

  • 我认为 OP 的意思是Set<Integer>,这完全有道理。唯一的缺点是它只能处理一系列整数,而不是所有整数。而那些按位的orand 逻辑运算将对应于并集和交集。
  • @TamasHegedus 这个问题与Set<Integer> 有什么关系? OP 的问题非常直截了当。
  • 这个问题本身的质量肯定有点低,需要一些解释,但对我来说,显然是关于Set<Integer>
【解决方案2】:

java.util.BitSet自 JDK 1.0 版本开始,java.util.Set 进入 JDK 1.2 阶段。所以BitSet 不能实现Set

如果您需要由BitSet 支持的Set<> 实现,使用支持BitSet 似乎并不难实现。

【讨论】:

  • 另外,EnumSetSet 的实现,它产生位集的这些好处:(a) 内存紧凑,(b) 执行速度非常快。在内部表示为位向量。
  • Hashtable/Stack/Vector 从 v 1.0 开始就在 JDK 中,但它们仍然可以更新以在 1.2 中实现 MapList。因此,这不是正当理由。
猜你喜欢
  • 1970-01-01
  • 2021-01-25
  • 2010-10-20
  • 2010-10-26
  • 2013-07-09
  • 2020-05-18
  • 1970-01-01
  • 2010-09-25
  • 2011-06-23
相关资源
最近更新 更多