我无法理解为什么JCF(Java Collection Framework)没有一个Bag
实现(允许重复并且不维护顺序)。
比起JCF当前的集合实现,Bag
性能会更好。
- 我知道如何在Java中实现
Bag
。 - 我知道
Bag
在Apache commons中可用。 - 我知道还有其他可用作
Bag
的实现,但与Bag
相比,这些实现需要做更多的工作。
为什么Java Collections框架没有提供像这样的直接实现呢?
我无法理解为什么JCF(Java Collection Framework)没有一个Bag
实现(允许重复并且不维护顺序)。
比起JCF当前的集合实现,Bag
性能会更好。
Bag
。Bag
在Apache commons中可用。Bag
的实现,但与Bag
相比,这些实现需要做更多的工作。为什么Java Collections框架没有提供像这样的直接实现呢?
目前,Bag违反了集合合同。许多方法与当前的集合规则冲突。
"Bag是一个计算对象在集合中出现次数的集合。假设您有一个包含{a,a,b,c}
的Bag。调用getCount(Object)
并传入a
将返回2,而调用uniqueSet()
将返回{a,b,c}
。
请注意,该接口违反了Collection合同。这些方法中许多指定的行为与Collection指定的行为不同。不符合要求的方法在其摘要行中用“(Violation)”明确标记。未来版本的此类将指定与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.
Map<Object, Long> bag
。bag.merge(obj, 1, Integer::sum);
bag.merge(obj, -1, (a, b) -> a > 1 ? a + b : 0);