【问题标题】:Guava MultiSet vs Map?番石榴多集与地图?
【发布时间】:2012-01-14 07:13:48
【问题描述】:

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

【问题讨论】:

    标签: java guava


    【解决方案1】:

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

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

    另见:

    Multiset Javadoc

    Multiset explained in the Guava Wiki

    【讨论】:

    • 除了可能比您的实现更高效之外,Multiset 还可以让您更清楚地了解您实际想要做什么,并且更难搞砸。通常,使用 Map,您要处理很多事情:检查键是否已经在地图中,处理计数为零以及各种棘手的事情。多重设置就可以了。
    【解决方案2】:

    对我来说,将MultisetMap 区别开来的最重要的一点是它是Collection:您只需将内容放入其中,以后就可以进行计数。它在概念上适合 Map 不适合的用例。对于这些用例,Map 只是一种 hack,它可以正常工作,因为 Java 没有提供更合适的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多