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
            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】

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值