随笔 - 416  文章 - 0  评论 - 842  阅读 - 273万

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】

 

posted on   雨点的名字  阅读(2560)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

点击右上角即可分享
微信分享提示

目录导航