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

2022-09-01 21:17:17

我不明白为什么JCF(Java集合框架)没有实现(允许重复而不维护顺序)。 性能将比 JCF 中当前的集合实现好得多。BagBag

  • 我知道如何在Java中实现。Bag
  • 我知道在Apache共享资源中可用。Bag
  • 我知道还有其他实现可以用作 a,但与 .BagBag

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


答案 1

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

这里提交的错误报告:

集合框架的维护者对设计和实现这些接口/类的热情并不高。我个人不记得需要一个。在现实世界中证明其价值后,更有可能在JDK之外开发的流行软件包被导入JDK。

支持 Bags 的需求在今天仍然有效。

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


答案 2

目前,袋子违反了收集合同。许多方法都与当前的收集规则冲突。

“袋子是一个集合,它计算对象在集合中出现的次数。假设您有一个包含 的包。调用将返回 2,而调用将返回 。{a, a, b, c}getCount(Object)auniqueSet(){a, b, c}

请注意,此接口违反了“集合”协定。其中许多方法中指定的行为与 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.

请参阅链接以获取更多信息: 这里