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

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

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

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

发表我的评论作为答案,因为它最好地回答了这个问题。

从这里提交的错误报告:

Collection框架的维护者之间没有很多热情来设计和实现这些接口/类。 我个人不记得需要一个。 在JDK之外开发的流行软件包更有可能在现实世界中certificate其价值之后被导入JDK。

对袋子的支持需求今天有效。

番石榴支持它。 还有GS-Collections 。

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

“Bag是一个集合,它计算对象在集合中出现的次数。假设你有一个包含{a, a, b, c}的Bag。在a上调用getCount(Object)将返回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

JDK尝试为您提供通用数据结构的实现,并允许您实现任何内容,如果常见结构不能为您的目的服务。 他们可能认为它不是常见的数据结构。从实用性来看,它们不可能实现每个数据结构或满足每个人的要求。 您认为共同点对多数人来说可能并不常见。