GuavaJava学习笔记

Google Guava常用集合类型解析

2017-08-31  本文已影响417人  AnakinSky
Multiset

Guava提供了一个新集合类型 Multiset,它可以多次添加相等的元素;

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

        Multiset multiset = HashMultiset.create();
        for (int i = 0;i<20;++i) {
            multiset.add(i);
        }
        for (int i = 0;i<20;i += 2) {
            multiset.add(i);
        }
        for (Object element: multiset.elementSet()) {
            System.out.printf("\n" + (Integer)element + ":" + multiset.count(element));
        }
SortedMultiset

SortedMultiset是Multiset 接口的变种,它支持高效地获取指定范围的子集;

Multimap

Multimap类似Map<K, List<V>>或Map<K, Set<V>>,不再赘述;

BiMap

BiMap双向映射容器,BiMap<key,valuse>是特殊的map,可以用 inverse()反转BiMap<key, value>的键值映射,key反转成value,value反转成key,BiMap保证值是唯一的,因此 values()返回Set而不是普通的Collection,在BiMap中,如果你想把键映射到已经存在的值,会抛出IllegalArgumentException异常。如果对特定值,你想要强制替换它的键,请使用 BiMap.forcePut(key, value)。

        BiMap<Integer,String> biMap = HashBiMap.create();
        biMap.put(1,"num1");
        biMap.put(2,"num1");

        //java.lang.IllegalArgumentException: value already present: num1
        BiMap<String,Integer> biMap1 = biMap.inverse();

Table

通常我们需要实现Map<key1,Map<key2,value>>,这种方式不仅写法上不雅观,在使用的时候也非常的不友好,因此guava提供了新容器Table实现类似c++ pair用法;
实现:HashBasedTable、TreeBasedTable、ImmutableTable、ArrayTable;

        HashBasedTable<String, Integer,Integer> hashBasedTable = HashBasedTable.create();
        hashBasedTable.put("Bob",18,69);
        hashBasedTable.put("Arby",17,90);
        Set<Table.Cell<String,Integer,Integer>> cells = hashBasedTable.cellSet();
        for(Table.Cell<String, Integer, Integer> temp : cells){
            System.out.println(temp.getRowKey()+":"+temp.getColumnKey()+":"+temp.getValue());
        }

ClassToInstanceMap

ClassToInstanceMap是一种特殊的map,它的key是类型,value是对应key类型的对象;

上一篇 下一篇

猜你喜欢

热点阅读