`
vipcowrie
  • 浏览: 350992 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
1167aa84-228b-38f8-88a0-4733613efdef
让Java跑起来
浏览量:64374
文章分类
社区版块
存档分类
最新评论

Google Guava集合3: BiMaps

阅读更多
BiMap

BiMap是一个有用的集合类型,很简单,它就是一个双向的映射。

反向转换一个Map

一个普通的map是一个key/value的集合,你可以使用key来查询

value,例如,我来创建一个字段:

Map<String,String> britishToAmerican = 

Maps.newHashMap();

britishToAmerican.put("aubergine","egglant");

britishToAmerican.put("courgette","zucchini");

britishToAmerican.put("jam","jelly");

但是如果你想根据美语找英语呢?你需要写代码转换一下:
// Generic method to reverse map.

public <S,T> Map<T,S> getInverseMap(Map<S,T> map) {

Map<T,S> inverseMap = new HashMap<T,S>();

for(Entry<S,T> entry: map.entrySet()) {

inverseMap.put(entry.getValue(), entry.getKey());

}

return inverseMap;

}

这样做能实现功能,但是有一些你要考虑的问题:
1)如何处理重复的value的情况,不考虑的话,那么反转的时候

会覆盖前面的值
2)如果我们需要在反转的map中增加新的key呢?我们是否也需

要在原始的map中更新一个值呢!这个实在太烦了

BiMap出场
这就是BiMap用武之地了,先看看怎么使用它:

BiMap<String,String> britishToAmerican = 

HashBiMap.create();

// Initialise and use just like a normal map

britishToAmerican.put("aubergine","egglant");

britishToAmerican.put("courgette","zucchini");

britishToAmerican.put("jam","jelly");


System.out.println(britishToAmerican.get

("aubergine")); // eggplant

BiMap<String,String> americanToBritish = 

britishToAmerican.inverse();

System.out.println(americanToBritish.get("eggplant")); // aubergine

System.out.println(americanToBritish.get("zucchini")); // courgette

很简单啊,但是有些事情还需要你注意:

强制唯一性:
首先,BiMap强制其value的唯一性,如果发现违规则会抛出

IllegalArgumentException。

britishToAmerican.put("pudding","dessert");

britishToAmerican.put("sweet","dessert"); // 

IllegalArgumentException.

如果你确实希望增加一个已经存在的值,那么可以使用forcePut

方法覆盖原有值。

britishToAmerican.put("pudding","dessert");

britishToAmerican.forcePut("sweet","dessert");  // Overwrites the previous entry

System.out.println(britishToAmerican.get("sweet")); // dessert

System.out.println(britishToAmerican.get("pudding")); // null

关于inverse方法

另外一个关键点就是理解inverse方法,这个方法返回一个反转

后的BiMap,即key/value互相切换的映射。

这个反转的map并不是一个新的map,而是一个视图,这意味着,

你在这个反转后的map中的任何增删改操作都会影响原来的map

americanToBritish.put("potato chips","crisps");

System.out.println(britishToAmerican.containsKey

("crisps")); // true

System.out.println(britishToAmerican.get("crisps")); 

// potato chips

这就是BiMap,很简单。和其他集合的一样,他也有很多的实现,

推荐你阅读他的API:[url]http://guava-

libraries.googlecode.com/svn/tags/release09/javadoc/co

m/google/common/collect/BiMap.html[/url]

另外multimap的介绍:
google guava multimap介绍:http://vipcowrie.iteye.com/blog/1517338
0
0
分享到:
评论

相关推荐

    guava-18.0-API文档-中英对照版.zip

    对应Maven信息:groupId:com.google.guava,artifactId:guava,version:18.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...

    guava-26.0-android-API文档-中英对照版.zip

    标签:google、guava、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...

    guava-24.1-jre-API文档-中英对照版.zip

    标签:google、guava、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...

    guava-26.0-android-API文档-中文版.zip

    标签:google、guava、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-25.1-jre.jar

    google的guava工具包很实用,包括之前的字符串处理工具类的,还有大量的collection相关的

    guava-18.0-API文档-中文版.zip

    对应Maven信息:groupId:com.google.guava,artifactId:guava,version:18.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...

    guava-17.0-API文档-中文版.zip

    标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-23.6-android

    guava-23.6-android guava 版本23.6的 jar 包

    guava-20.0-API文档-中文版.zip

    标签:google、guava、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-23.0-API文档-中文版.zip

    标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    google Guava集合工具类(超实用)

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你...

    Google的Guava工具包

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你...

    guava27.0.1-source

    guava-27.0.1全套,源码,doc都有,2019年1月份下载,本想免费,可以是必须得选个资源分数,里面没有0,无奈选个1

    guava-28.2-jre.jar

    使用hasing文件要用到的jar,版本号为28.2,最新的j稳定的ar 不会被jarjar.jar 工具进行修改编辑操作

    guava-30.1.1-jre-API文档-中文版.zip

    标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-25.0-jre-API文档-中文版.zip

    标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-12.0.1-API文档-中英对照版.zip

    对应Maven信息:groupId:com.google.guava,artifactId:guava,version:12.0.1 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...

    guava-16.0.1-API文档-中文版.zip

    标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-22.0-API文档-中文版.zip

    标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-30.0-jre-API文档-中文版.zip

    标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

Global site tag (gtag.js) - Google Analytics