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