欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

谷歌guava_Google Guava BiMaps

发布时间:2023/12/3 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 谷歌guava_Google Guava BiMaps 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

谷歌guava

接下来的番石榴之旅是另一个有用的收藏类型BiMap 。 实际上,这非常简单,BiMap只是双向地图。

反转地图

普通的Java映射是一组键和值,您可以按键查找值,这非常有用,例如,说我想创建一个(非常原始的)英式英语到美式英语词典:

Map<String,String> britishToAmerican = Maps.newHashMap(); britishToAmerican.put('aubergine','egglant'); britishToAmerican.put('courgette','zucchini'); britishToAmerican.put('jam','jelly');

但是,如果您要一本美英词典呢? 好吧,您可以编写一些代码来反转地图:

// Generic method to reverse map.public %lt;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;}

它可以完成工作,但是您可能需要考虑一些复杂问题。

  • 我们如何处理原始地图中的重复值? 目前,它们会在反向图中被无声覆盖。
  • 如果我们想在反向地图中放置一个新条目怎么办? 我们还必须更新原始地图! 这可能会令人讨厌。

双图

好吧,你猜怎么着? 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')); // eggplantBiMap<String,String> americanToBritish = britishToAmerican.inverse();System.out.println(americanToBritish.get('eggplant')); // aubergine System.out.println(americanToBritish.get('zucchini')); // courgette

确实很简单,但是有一些注意事项。

加强独特性

首先,BiMap强制其值具有唯一性,并且如果您尝试插入重复的值,则会给您一个非法的参数异常,即

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方法,它返回逆BiMap,即带有键和值的开关的地图。
现在,此反向映射不仅仅是一个新映射,例如我先前创建的reverseMap方法。 它实际上是原始地图的视图 。 这意味着对逆方法的任何后续更改都会影响原始地图!

americanToBritish.put('potato chips','crisps'); System.out.println(britishToAmerican.containsKey('crisps')); // true System.out.println(britishToAmerican.get('crisps')); // potato chips

正如我所说的,这就是BiMap。 与往常一样,有几种实现方式,并且我建议您阅读一下完整的API文档:
http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/collect/BiMap.html

参考: Tom's编程博客博客中的JCG合作伙伴 Tom Jefferys提供的Google Guava BiMaps 。

翻译自: https://www.javacodegeeks.com/2012/12/google-guava-bimaps.html

谷歌guava

总结

以上是生活随笔为你收集整理的谷歌guava_Google Guava BiMaps的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。