java代码(7) ---guava之Bimap


guava之Bimap


bimap的作用很清晰:它是一个——映射,可以通过key得到value,也可以通过value得到key

一、概述

1、bimap和普通HashMap区别

(1)在java集合类库中的Map,它的特点是存放的键(key)是唯一的,而值(value)可以不唯一,而

  bimap要求key和value都唯一,如果key不唯一则覆盖key,如果value不唯一则直接报错

2、案例展示

public class BiMapTest {
    public static void main(String[] args) {
        //双向map
        HashBiMap<Integer, String> biMap = HashBiMap.create();
        biMap.put(1,"张三");
        biMap.put(2,"李四");
        biMap.put(3,"王五");
        biMap.put(4,"赵六");
        biMap.put(5,"李七");
        biMap.put(4,"小小");
        //通过key得到value值
        String value = biMap.get(1);
        System.out.println("id为1的value值==="+value);

        //通过value值得到key值
        Integer key = biMap.inverse().get("张三");
        System.out.println("张三key值--"+key);

        //通过key值重复,那么value值会被覆盖、
        String valueName = biMap.get(4);
        System.out.println("id为4的value值--"+valueName);
    }
}

运行结果:

 如果value值重复,则运行直接报错如下:

biMap.put(6,"小小");
            /**后台直接报错
             * Exception in thread "main" java.lang.IllegalArgumentException: value already present: 小小
             *     at com.google.common.collect.HashBiMap.put(HashBiMap.java:285)
             *     at com.google.common.collect.HashBiMap.put(HashBiMap.java:260)
             *     at com.jincou.stream.study.bimapTest.main(bimapTest.java:40)
             */

如果你想value也发生覆盖key值,那么可以:

// inverse方法会返回一个反转的BiMap,但是注意这个反转的map不是新的map对象,它实现了一种视图关联,这样你对于反转后的map的所有操作都会影响原先的map对象。
       biMap.forcePut(6,"小小");
       int key6= biMap.inverse().get("小小");
       System.out.println("小小key值 --"+key6);
     /**后台输出(已经把:biMap.put(4,"小小"覆盖)
       *
       * 小小key值 --6
       */

3、Bimap实现类

BiMap的常用实现有:

    1、HashBiMap: key 集合与 value 集合都有 HashMap 实现

    2、EnumBiMap: key 与 value 都必须是 enum 类型

    3、ImmutableBiMap: 不可修改的 BiMap

猜你喜欢

转载自www.cnblogs.com/zhenbian/p/12941910.html