Guava MultiSet和Map有何区别?

17

我理解Multiset是一种带有频率的集合,但是我也可以使用Map来表示频率,除此之外还有其他使用Multiset的原因吗?

2个回答

31

Multiset<E> 相对于 Map<E, Integer> 的优势:

  • 无需特殊代码即可添加尚未在集合中的元素。
  • 直接处理元素计数的方法:count(E)add(E, int) 等。
  • 代码意图更加清晰。显然,Multiset<E> 将元素映射到它们的计数。而 Map<E, Integer> 可以将元素映射到任意整数。

另请参阅:

Multiset Javadoc

Guava Wiki 中的 Multiset 解释


5
除了您的实现可能更有效外,Multiset还能更清晰地表达您实际想要做什么,而且更难出错。通常,使用Map<E,Integer>时,您需要处理很多东西:检查键是否已在映射中,处理计数为零和各种棘手的业务。 Multiset则可以直接使用,非常方便。 - Louis Wasserman

9
对我来说,将Multiset与Map区分开来的最重要的一点是它是一个Collection:您只需将东西放入其中,稍后就可以获得计数。从概念上讲,它适用于设计它的用例,而Map则不适用。对于这些用例,Map只是一种“勉强能用”的hack方法,因为Java没有提供更适合的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接