guava的拓展Collection,Multiset,Multimap,BiMap,Table的简单理解和案例代码

官方文档说明

 /**
     *  Multiset 类似 Map ,
     *  比如存储一个wordcount, 某个对象和个数
     *  count(k): 返回该对象的个数,不存在返回 0
     *  size(): 总个数
     */
    @Test
    void test0() {
        HashMultiset<@Nullable Object> m = HashMultiset.create();
        m.add("a");
        m.add("b");
        m.add("c");
        m.add("c");
        m.add("d", 3);
        System.out.println(m);//[a, b, c x 2, d x 3]
        System.out.println(m.count("d"));//3
        m.remove("c");
        m.remove("d",2);
        System.out.println(m);//[a, b, c, d]
        System.out.println(m.size());//4
        m.iterator().forEachRemaining(System.out::println);

    }

    /**
     * Multimap  类似 Map > 例如 Map >
     * get(k): k不存在时返回一个 空集合
     * 创建方式:
     * 1,MultimapBuilder.xxx().xx().builder();
     * 2,实现类.create()。例如ArrayListMultimap.create();
     * asMap(): 返回 Map >
     */

    @Test
    void test1() {
        ListMultimap<@Nullable Object, @Nullable Object> m = MultimapBuilder.hashKeys().arrayListValues().build();
        m.put(1, "a");
        m.put(1, "b");
        m.putAll(2, Arrays.asList("a", "b", "c"));

        System.out.println(m);//{1=[a, b], 2=[a, b, c]}
        System.out.println(m.get(1));//[a, b]
        System.out.println(m.get(54));//[]
        Map<@Nullable Object, Collection<@Nullable Object>> m2 = m.asMap();
        System.out.println(m2);//{1=[a, b], 2=[a, b, c]}

    }


    /**
     * BiMap 类似 键值可以互换的Map, 所以v不能重复。
     * BiMap的inverse(): BiMap -> BiMap
     */
    @Test
    void test2() {
        HashBiMap<@Nullable String, @Nullable Integer> m = HashBiMap.create();
        m.put("Tom", 17);
        m.put("Jack", 18);
        m.put("Lucy", 7);
        //m.put("Tom",7);//键相同,值覆盖。 值相同,抛异常
        m.forcePut("Tom", 7);//强制put。会覆盖掉 lucy--7
        System.out.println(m);//{Tom=7, Jack=18}
        BiMap<@Nullable Integer, @Nullable String> m2 = m.inverse();
        System.out.println(m2);//{7=Tom, 18=Jack}
    }
    /**
     * Table,类似 Map>, 抽象的row,column,value,根据行列坐标确定值。
     * row(r)-->Map
     * column(c)-->Map
     */
    @Test
    void test3() {
        HashBasedTable<String, String, Object> table = HashBasedTable.create();
        table.put("wang", "1", "wang-1");
        table.put("wang", "2", "wang-2");
        table.put("wang", "3", "wang-3");
        table.put("zhang", "1", "zhang-1");
        table.put("zhang", "2", "zhang-2");
        table.put("zhang", "4", "zhang-4");
        table.put("zhang", "5", "zhang-5");

        System.out.println(table.get("wang", "3"));//wang-3
        System.out.println(table.row("wang"));//{1=wang-1, 2=wang-2, 3=wang-3}
        System.out.println(table.column("2"));//{wang=wang-2, zhang=zhang-2}
    }

你可能感兴趣的:(java,java,开发语言,后端)