为什么在java集合框架中没有直接实现Bag?

时间:2013-03-25 06:09:06

标签: java collections

我无法弄清楚为什么JCF(Java Collection Framework)没有Bag实现(允许重复而不维护顺序)。 Bag性能比JCF中当前的Collection实现要好得多。

  • 我知道如何在java中实现Bag。
  • 我知道Apache中有一个Bag集合。
  • 我知道我可以使用任何实现作为一个包!但是与Bag相比,其他实施工作还有很多工作。

为什么Java Collections框架没有提供像这样的直接实现?

3 个答案:

答案 0 :(得分:13)

将评论作为答案发布,因为它最能回答这个问题。

从提交的错误报告here

  

维护者之间并没有太多的热情   用于设计和实现这些接口/类的集合框架。   我个人不记得需要一个。这样的可能性更大   在JDK之外开发的流行包将被导入   在现实世界中证明了它的价值后进入JDK。

支持行李的需求今天有效。

Guava支持它。还GS-Collections

答案 1 :(得分:3)

目前,bag违反了收藏合同。许多方法与当前的集合规则相冲突。

" Bag是一个集合,用于计算对象在集合中出现的次数。假设您有一个包含{a, a, b, c}的行李。在getCount(Object)上呼叫a将返回2,而呼叫uniqueSet()将返回{a, b, c}

请注意,此界面违反了Collection合约。许多这些方法中指定的行为与Collection指定的行为不同。不符合要求的方法清楚地标有"(违规)"在他们的总结线。此类的未来版本将指定与Collection相同的行为,遗憾的是,这将破坏与此版本的向后兼容性。"

 boolean add(java.lang.Object o)
      (Violation) Add the given object to the bag and keep a count.

 boolean removeAll(java.util.Collection c)
      (Violation) Remove all elements represented in the given collection, respecting cardinality.

请参阅该链接以获取更多信息:HERE

答案 2 :(得分:0)

JDK尝试为您提供通用数据结构的实现,并允许您实现任何内容,如果常见结构不能满足您的目的。他们可能认为它不是常见的数据结构。从实用性来看,它们不可能实现每个数据结构或满足每个人的要求。您认为普遍存在的可能并不适合大多数人。