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。

  • 相关阅读:
    sqlalchemy 转json 的几种常用方式
    程序员的思维模型指南
    软件的本质
    Python数据模型及Pythonic编程
    Linux Kernel C语言编程范式
    U-Boot内存管理
    Linux网络文件系统的实现与调试
    Linux内核内存管理架构
    Linux多核并行编程关键技术
    Go/Python/Erlang编程语言对比分析及示例
  • 原文地址:https://www.cnblogs.com/congsg2016/p/5121162.html
Copyright © 2011-2022 走看看