zoukankan      html  css  js  c++  java
  • Guava包学习--Multiset

    Multiset之前倒是没用过,后来看了下还挺有用,其实它就是支持重复元素的HashSet,相当于list+set的集合,综合了两种集合的优点。

    它扩展了Collection:

    @GwtCompatible
    public interface Multiset<E> extends Collection<E> {}

    先用一下看看:

    List<String> list = Lists.newArrayList("10", "20", "hello", "hah", "hah", "hah");
    Multiset<String> set = HashMultiset.create(list);
    System.out.println(set.contains("hello"));
    System.out.println(set.count("hah"));
    System.out.println(set.count("haha"));
    System.out.println(set.elementSet().toString()+set.entrySet().toString());
    true

    3

    0

    [hello, 20, 10, hah][hello, 20, 10, hah x 3]
     

    其实它和list很像,支持一个叫做count计数的方法,直接拿elementSet()的时候它会提供唯一的元素列表。使用它的entrySet会有一个唯一元素+计数的输出。

    我们看下它的继承和实现体系:

    其实它继承了AbstractMapBasedMultiset,然后AbstractMapBasedMultiset又继承了AbstractMultiset,然后又实现了Multiset的接口,Multiset继承了Collection,然后在Multiset对象中有一个count的计数,当有元素进入和输出的时候会有计数器的处理。

    其实AbstractMapBasedMultiset就是一个key+count的map,这下就容易理解了。其实HashMultiSet就是对一个map进行了继承和覆盖,然后方法去操作一些唯一元素的计数与处理,但是又可以不丢失元素,还加快了get的获得速度。

    至于这个Set的其实工具类应该和之前看的没有大的异同,暂时就不深入看了,接下来去看下MultiMap。

  • 相关阅读:
    luogu1210 回文检测
    luogu2420 让我们异或吧
    luogu4151 最大XOR和路径
    线性基
    博弈论(扯淡)
    矩阵求逆 模板
    luogu2513 逆序对数列
    洛谷4316 绿豆蛙的归宿(DAG递推/概率dp)
    1898: [Zjoi2005]Swamp 沼泽鳄鱼
    矩阵
  • 原文地址:https://www.cnblogs.com/congsg2016/p/5121162.html
Copyright © 2011-2022 走看看