guava学习:guava集合类型-Bimap - mickey007 - 博客园

文章推薦指數: 80 %
投票人數:10人

学习guava让我惊喜的第二个接口就是:Bimap BiMap是一种特殊的映射其保持 ... System.out.println(inverseMap); empIDNameMap.put(new Integer(104) ... 首页 新闻 博问 专区 闪存 班级 我的博客 我的园子 账号设置 简洁模式... 退出登录 注册 登录 流逝的青春 人生需要磨砺,青春不惧挑战 guava学习:guava集合类型-Bimap 学习guava让我惊喜的第二个接口就是:Bimap BiMap是一种特殊的映射其保持映射,同时确保没有重复的值是存在于该映射和一个值可以安全地用于获取键背面的倒数映射。

最近开发过程中,经常会有这种根据key找value或者根据value找key的功能,之前都是将值存储到枚举或者map中,然后通过反转的写法来实现的,直到发现了Bimap,才发现原来还有这么简便的方式。

接口申明 @GwtCompatible publicinterfaceBiMap extendsMap 接口方法   S.N.方法及说明 1 VforcePut(Kkey,Vvalue)另一种put的形式是默默删除,在put(K,V)运行前的任何现有条目值值。

2 BiMapinverse()返回此bimap,每一个bimap的值映射到其相关联的键的逆视图。

3 Vput(Kkey,Vvalue)关联指定值与此映射中(可选操作)指定的键。

4 voidputAll(Mapmap)将所有从指定映射此映射(可选操作)的映射。

5 Setvalues()返回此映射中包含Collection的值视图。

  使用样例 BiMapempIDNameMap=HashBiMap.create(); empIDNameMap.put(newInteger(101),"Mahesh"); empIDNameMap.put(newInteger(102),"Sohan"); empIDNameMap.put(newInteger(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反转工具类 *@parammap *@param *@param *@return */ privatestaticMapgetInverseMap(Mapmap){ MapinverseMap=newHashMap(); for(Map.Entryentry:map.entrySet()){ inverseMap.put(entry.getValue(),entry.getKey()); } returninverseMap; } 运行结果 Mahesh 101 101   inverse方法会返回一个反转的BiMap,但是注意这个反转的map不是新的map对象,它实现了一种视图关联,这样你对于反转后的map的所有操作都会影响原先的map对象。

让我们继续看下面的例子 System.out.println(empIDNameMap); BiMapinverseMap=empIDNameMap.inverse(); System.out.println(inverseMap); empIDNameMap.put(newInteger(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的数据都是相关联的发生变化。

开开心心编码,快快乐乐生活。

posted@ 2018-10-1914:59  mickey007  阅读(508)  评论(0)  编辑  收藏  举报 刷新评论刷新页面返回顶部 Copyright©2022mickey007 Poweredby.NET6onKubernetes



請為這篇文章評分?