zoukankan      html  css  js  c++  java
  • 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}}
  • 相关阅读:
    Linux 防火墙配置
    【存在问题,待修改】SSH 远程登陆
    Hadoop 本地模式安装
    CentOS7 安装 JDK
    JS的DOM操作
    JavaScript
    格式与布局(定位)
    样式表
    表单、内嵌网页
    HTML中的一般标签、常用标签和表格
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15362235.html
Copyright © 2011-2022 走看看