【java代码之美】---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
            BiMap<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值(注意key里面的类型根据泛行
            String value= biMap.get(1);
            System.out.println("id为1的value值 --"+value);

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

            //通过key值重复,那么vakue值会被覆盖。
            String valuename= biMap.get(4);
            System.out.println("id为4的value值 --"+valuename);
        }
}
/*运行结果:
 *id为1的value值 --张三
 *张三key值 --1
 *id为4的value值 --小小
 */

如果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

想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。中校【16】

猜你喜欢

转载自www.cnblogs.com/qdhxhz/p/9425039.html