Guava MultiSet对比地图?

Ada*_*Lee 18 java guava

我对Multiset的理解是一个有频率的集合,但是我总是可以使用Map来表示频率,还有其他理由使用Multiset吗?

Are*_*rff 32

Multiset<E>超过a的优点Map<E, Integer>:

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

也可以看看:

Multiset Javadoc

Multiset在Guava Wiki中进行了解释

  • 除了可能比你的实现更有效之外,Multiset让你更清楚你实际上要做的事情,并且更难以搞定.通常,使用Map <E,Integer>,您需要处理很多事情:检查密钥是否已经在地图中,处理计数为零,以及各种棘手的业务.Multiset正常运作. (5认同)

Col*_*inD 9

对我来说,那将是最重要的一点,Multiset从分开Map的是,它是一个Collection:你只要把东西进去以后,你可以得到计数.它在概念上适合其设计的用例Map.对于那些用例,a Map只是一种有点排序的hack,因为Java没有提供更合适的东西.