我无法弄清楚为什么JCF(Java Collection Framework)没有Bag实现(允许重复而不维护顺序)。 Bag性能比JCF中当前的Collection实现要好得多。
为什么Java Collections框架没有提供像这样的直接实现?
答案 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尝试为您提供通用数据结构的实现,并允许您实现任何内容,如果常见结构不能满足您的目的。他们可能认为它不是常见的数据结构。从实用性来看,它们不可能实现每个数据结构或满足每个人的要求。您认为普遍存在的可能并不适合大多数人。