• guava集合类(转载)


    转载:https://www.cnblogs.com/moongeek/p/12831296.html

    Collection JDK ImmutableCollection
    List JDK ImmutableList
    Set JDK ImmutableSet
    SortedSet/NavigableSet JDK ImmutableSortedSet
    Map JDK ImmutableMap
    SortedMap JDK ImmutableSortedMap
    Multiset Guava ImmutableMultiset
    SortedMultiset Guava ImmutableSortedMultiset
    Multimap Guava ImmutableMultimap
    ListMultimap Guava ImmutableListMultimap
    SetMultimap Guava ImmutableSetMultimap
    BiMap Guava ImmutableBiMap
    ClassToInstanceMap Guava ImmutableClassToInstanceMap
    Table Guava ImmutableTable

    2. Multiset#

    定义摘自维基百科:

    ”集合[set]概念的延伸,它的元素可以重复出现…与集合[set]相同而与元组[tuple]相反的是,Multiset元素的顺序是无关紧要的:Multiset {a, a, b}和{a, b, a}是相等的”

    Multiset继承自JDK中的Collection接口,而不是Set接口,所以可以包含重复元素。可以从以下角度理解:

    • 没有元素顺序限制的ArrayList
    • Map<E, Integer>,键为元素,值为计数

    Multiset提供像无序的ArrayList的基本操作:

    • add(E)添加单个给定元素
    • iterator()返回一个迭代器,包含Multiset的所有元素(包括重复的元素)
    • size()返回所有元素的总个数(包括重复的元素)

    当把Multiset看作Map<E, Integer>时,它也提供了Map的查询操作:

    • count(Object)返回给定元素的计数。
    • entrySet()返回Set<Multiset.Entry>,和Map的entrySet类似。
    • elementSet()返回所有不重复元素的Set,和Map的keySet()类似。
    Multiset<Object> multiset = HashMultiset.create();
            multiset.add("A");
            multiset.add("A");
            multiset.add("A");
            multiset.add("B");
            multiset.add("B");
            multiset.add("C");
            int b = multiset.count("B");
            System.out.println(b);
            System.out.println(multiset);

    输出:

    2
    [A x 3, B x 2, C]

    3. Multimap#

    通俗来讲,Multimap 是一键对多值的HashMap,类似于 Map<K, List> 的数据结构。

    //ListMultimap中value的元素可以重复
    ListMultimap<Object, Object> listMultimap = ArrayListMultimap.create();
    //Multimap和SetMultimap具有相同的性质,value的元素不能重复
    Multimap<Object, Object> multimap = HashMultimap.create();
    SetMultimap<Object, Object> setMultimap = HashMultimap.create();

    主要操作:

    • asMap:为Multimap<K, V>提供Map<K,Collection>形式的视图
    • entries:返回所有”键-单个值映射”,包括重复键。Collection<Map.Entry<K, V>>类型
    • keySet:返回所有不同的键,Set类型
    • keys:用Multiset表示Multimap中的所有键,每个键重复出现的次数等于它映射的值的个数。可以从这个Multiset中移除元素,但不能做添加操作;移除操作会反映到底层的Multimap
    • values:用一个”扁平”的Collection包含Multimap中的所有值,包括重复键

    4. BiMap#

    一般的Map只提供”键-值“的映射,而BiMap则同时提供了”键-值“和”值-键“的映射关系。常用方法:

    • put(K key, V value):添加新的键、值。如果值和已有键重复,会抛出异常

    • forcePut(K key, V value):添加新的键、值。如果值和已有键重复,会覆盖原来的键、值

    • inverse():得到”值-键“的BitMap对象

     

    5. Table#

    Table类似多个索引的表,类似 Map<R, Map<C, V>> 的数据结构。它有两个支持所有类型的键:”行”和”列”,可以通过以下方法获取多个视图:

    • rowMap():用Map<R, Map<C, V>>表现Table<R, C, V>。同样的, rowKeySet()返回”行”的集合Set。
    • row(r):用Map<C, V>返回给定”行”的所有列,对这个map进行的写操作也将写入Table中。
    • cellSet():用元素类型为Table.Cell的Set表现Table<R, C, V>。Cell类似于Map.Entry,但它是用行和列两个键区分的。
     Table<Object, Object, Object> table = HashBasedTable.create();
            table.put("1", "A", 2);
            table.put("1", "B", 1);
            table.put("2", "B", 3);
            System.out.println(table.row("1"));
            System.out.println(table.column("B"));
            System.out.println(table);

    输出:

    {A=2, B=1}
    {1=1, 2=3}
    {1={A=2, B=1}, 2={B=3}}
  • 相关阅读:
    几个关于设计的小问题
    基于建立/保持时间等的参数化时序分析
    Stratix内嵌存储器测试报告
    采用流水线技术实现8位加法器
    运算顺序引发的一系列有趣问题
    PON系统基础知识简介
    某MDU产品OMCI软件升级加速方案
    研究生期间接受的指导(二)
    研究生期间接受的指导(一)
    1063 Set Similarity (25 分)
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15362235.html
Copyright © 2020-2023  润新知