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】

java代码之美(7)---guava之Bimap的更多相关文章

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

    guava之Bimap bimap的作用很清晰:它是一个——映射,可以通过key得到value,也可以通过value得到key 一.概述 1.bimap和普通HashMap区别 (1)在java集合类 ...

  2. java代码之美(14)---Java8 函数式接口

    Java8 函数式接口 之前写了有关JDK8的Lambda表达式:java代码之美(1)---Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加 ...

  3. java代码之美(15)---Java8 Function、Consumer、Supplier

    Java8 Function.Consumer.Supplier 有关JDK8新特性之前写了三篇博客: 1.java代码之美(1)---Java8 Lambda 2.java代码之美(2)---Jav ...

  4. java代码之美(4)---guava之Immutable(不可变)集合

    Immutable(不可变)集合 一.概述 guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现,暂时不展开.Collections是jdk提供的一个工具类 ...

  5. java代码之美(3)---guava 复写Object常用方法

    guava 复写Object常用方法 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方 ...

  6. java代码之美(11)---java代码的优化

    java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...

  7. java代码(3)----guava复写Object常用方法

    guava复写Object常用方法 Guava是一个Google的基于java1.6的类库集合的扩展项目,这个库提供用于集合,缓存,支持原语,并发性,字符串处理,I/O和验证的实用方法, 这些高质量的 ...

  8. java代码之美(8)---guava字符串工具

    guava字符串工具 在java开发过程中对字符串的处理是非常频繁的,google的guava工具对字符串的一些处理进行优化,使我们开发过程中让自己的代码看去更加美观,清爽. 一.Joiner 根据给 ...

  9. java代码之美(9)---guava之Lists、Maps

    guava之Lists.Maps 谷歌提供了guava包里面有很多的工具类,Lists和Maps集合工具,集合操作做了些优化提升. 1.概述 1.静态工厂方法 (1)Guava提供了能够推断范型的静态 ...

随机推荐

  1. [数据结构] 用C语言模拟一个简单的队列程序

    #include<stdio.h> #include <stdlib.h> #include<string.h> #include<math.h> // ...

  2. #工具 Intellij IDEA中自定义的Maven Archetype管理

    背景,手贱在输入自定义的 archetype时后面多输入了一个空格 解决:自定义的Archetype 会保存在Windows下面的文件中 C:\Users\<user>\.IntelliJ ...

  3. On the Optimal Approach of Survivable Virtual Network Embedding in Virtualized SDN

    Introduction and related work 云数据中心对于虚拟技术是理想的创新地方. 可生存性虚拟网络映射(surviavable virtual network embedding ...

  4. 关于VB里判断逻辑的说明

    如上图,当进行连续判断的时候,即使第一个已经不符合条件了,后面的依然会计算.这点一定要记住,除非你所有的函数都有必要执行,否则会导致效率降低. 减代码不一定能提高效率,对于IIF和连续判断写法,貌似很 ...

  5. Shell 编程注意点

    (一)判断语句 [$# -lt 4 ]判断语句,格式[空格 比较对象1 比较符号 比较对象2] $# 启动脚本时携带参数个数;参数个数总数. $1 代表第一个参数. $? 最后一次执行名命令的退出状态 ...

  6. redis在windows和Linux系统下的下载、安装、配置

    1.下载redis安装包 在redis的官网只有Linux系统下的安装包,微软的GitHub上有提供windows版本的redis安装包 redis中文网:http://www.redis.cn/ 微 ...

  7. 按模板批量修改Excel文件内容

    Sub 按模板修改Excel文件() Dim MoBanWorkBook As Workbook Set MoBanWorkBook = Application.ActiveWorkbook Dim ...

  8. SpringMvc 中的实用工具类介绍(包括 ResponseEntity、 RestTemplate、WebUtils 等)

    此部分内容将包含 ResponseEntity. RestTemplate.WebUtils 等 1. ResponseEntity ① Sprring Mvc 中作为方法的返回值使用法 @Reque ...

  9. cadence元件放置方法

    在导入网表之后,需要放置元件,介绍几种常见的放置元件的方法和常用的几种元件操作方法.

  10. Burp Suite Pro 教程

    1.Burp Suite Pro2.0.11破解版-2018.11.06更新 说明基地址 来源:http://ximcx.cn/post-110.html 启动;如果是用的burp2.0,把下面的代码 ...