guava学习:guava集合类型-Bimap
学习guava让我惊喜的第二个接口就是:Bimap
BiMap是一种特殊的映射其保持映射,同时确保没有重复的值是存在于该映射和一个值可以安全地用于获取键背面的倒数映射。
最近开发过程中,经常会有这种根据key找value或者根据value找key 的功能,之前都是将值存储到枚举或者map中,然后通过反转的写法来实现的,直到发现了Bimap,才发现原来还有这么简便的方式。
接口申明
@GwtCompatible
public interface BiMap<K,V>
extends Map<K,V>
接口方法
| S.N. | 方法及说明 |
|---|---|
| 1 | V forcePut(K key, V value) 另一种put的形式是默默删除,在put(K, V)运行前的任何现有条目值值。 |
| 2 | BiMap<V,K> inverse() 返回此bimap,每一个bimap的值映射到其相关联的键的逆视图。 |
| 3 | V put(K key, V value) 关联指定值与此映射中(可选操作)指定的键。 |
| 4 | void putAll(Map<? extends K,? extends V> map) 将所有从指定映射此映射(可选操作)的映射。 |
| 5 | Set<V> values() 返回此映射中包含Collection的值视图。 |
使用样例
BiMap<Integer, String> empIDNameMap = HashBiMap.create();
empIDNameMap.put(new Integer(101), "Mahesh");
empIDNameMap.put(new Integer(102), "Sohan");
empIDNameMap.put(new Integer(103), "Ramesh");
//得到101对应的value
System.out.println(empIDNameMap.get(101));
//得到Mahesh对应key
System.out.println(empIDNameMap.inverse().get("Mahesh"));
//传统map的写法
System.out.println(getInverseMap(empIDNameMap).get("Mahesh"));
/**
* map反转工具类
* @param map
* @param <S>
* @param <T>
* @return
*/
private static <S,T> Map<T,S> getInverseMap(Map<S,T> map) {
Map<T,S> inverseMap = new HashMap<T,S>();
for(Map.Entry<S,T> entry: map.entrySet()) {
inverseMap.put(entry.getValue(), entry.getKey());
}
return inverseMap;
}
运行结果
Mahesh
101
101
inverse方法会返回一个反转的BiMap,但是注意这个反转的map不是新的map对象,它实现了一种视图关联,这样你对于反转后的map的所有操作都会影响原先的map对象。
让我们继续看下面的例子
System.out.println(empIDNameMap);
BiMap<String,Integer> inverseMap = empIDNameMap.inverse();
System.out.println(inverseMap);
empIDNameMap.put(new Integer(104),"Jhone");
System.out.println(empIDNameMap);
System.out.println(inverseMap); inverseMap.put("Mahesh1",105);
System.out.println(empIDNameMap);
System.out.println(inverseMap);
运行结果
{101=Mahesh, 102=Sohan, 103=Ramesh}
{Mahesh=101, Sohan=102, Ramesh=103}
{101=Mahesh, 102=Sohan, 103=Ramesh, 104=Jhone}
{Mahesh=101, Sohan=102, Ramesh=103, Jhone=104}
{101=Mahesh, 102=Sohan, 103=Ramesh, 104=Jhone, 105=Mahesh1}
{Mahesh=101, Sohan=102, Ramesh=103, Jhone=104, Mahesh1=105}
可以看到,无论是操作empIdNameMap 还是操作inverseMap,2个map的数据都是相关联的发生变化。
guava学习:guava集合类型-Bimap的更多相关文章
- [Google Guava]学习--新集合类型BiMap
BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. Bimap 能非常方便的实现map<key,value>的转置要求,也就是value变为key,key变 ...
- [Google Guava]学习--新集合类型Multiset
Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口. Multiset主要方法介绍: a ...
- [Google Guava]学习--新集合类型Multimap
每个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>,并且要忍受这个结构的笨拙. 假如目前有个需求是给两 ...
- Guava新增集合类型-Bimap
Guava新增集合类型-Bimap BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. 通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但 ...
- Guava学习笔记:Guava新增集合类型-Bimap
BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. 通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是如果出现下面一种场景的情况,我们就 ...
- [Google Guava] 2.2-新集合类型
转自:并发编程网 原文链接:http://ifeve.com/google-guava-newcollectiontypes/ 链接博客其他文章中还有更多的guava其他功能的描述,有空可慢慢看. G ...
- Python学习笔记——集合类型
集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...
- Scala学习笔记--集合类型Queue,Set
补充知识:http://www.importnew.com/4543.html 正文开始 scala.collection.immutable scala.collection.mutable 队列Q ...
- Swift 学习- 05 -- 集合类型
// 集合类型 // swift 提供 Arrays , Sets 和 Dictionaries 三种基本的集合类型用来存储数据 , 数组(Arrays) 是有序数据的集, 集合(Sets)是无序无重 ...
随机推荐
- Rhino 使 JavaScript 应用程序更灵动(转载)
脚本语言有良好的快速开发,高效率的执行,解释而非编译执行等优点,并且具有与其他语言编写的组件之间强大的通信功能.JavaScript 一直是脚本语言中的领头羊,它是一门具有非常丰富特性的语言.除了浏览 ...
- Oracle E-Business Suite R12.2的新技术特点
Oracle公司的系统研发开发与执行效率,让人不得不佩服.从2008年1月收购BEA到现在短短几年时间,就把Bea WebLogic产品融合到了Oracle公司自己的原研发产品之庞大的Oracle E ...
- oracle ebs常规小看点
1. 在oracle applications 11i 中如何快速获得上次查询的SQL 语句 方法:我们不必使用SQL Trace 来获得,有一个简单的办法,即:帮助->诊断->检查- ...
- wp8.1 创建动态磁贴应用
目前Windows Phone 8.1所支持磁贴像素大小有71x71.150x150和310x150,分为大中小三种模式,对于桌面磁贴微软提供的诸多模板http://msdn.microsoft.co ...
- hive执行结果moveTask操作失败
hive执行结果moveTask操作失败 Apache Hive 2.1.0 ,在执行"INSERT OVERWRITE TABLE ...... select "或者 " ...
- androidstudio提示adb错误:cannot parse version string:kg01的解决方法
打开adb.exe的文件目录,同时按下shift和鼠标右键,打开cmd后运行一下这个命令adb kill-server
- Promise之你看得懂的Promise
本文由作者陈旭锋(任职网易考拉)授权网易云社区发布. Promise源码详解 学习知识要善于思考,思考,再思考. -- 爱因斯坦 1.回调地狱 曾几何时,我们的代码是这样的,为了拿到回调的结果,不得不 ...
- JVM垃圾收集器(1)
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法& ...
- c语言第一次作业--顺序、分支结构
1.1思维导图 1.2.1本周学习体会以及代码量学习体会 1.2.2学习体会 因为在暑假时候没有对c语言进行学习,没太关注一些学习资料,一些教学视频也没看,感觉对c语言是陌生的,刚开课的时候自 ...
- epoll好文章
https://www.cnblogs.com/apprentice89/p/3234677.html https://www.jianshu.com/p/aa486512e989 https://c ...