日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Google Guava BiMaps

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Google Guava BiMaps 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接下來的番石榴之旅,是另一種有用的收藏類型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 Programming Blog博客上的JCG合作伙伴 Tom Jefferys提供的Google Guava BiMaps 。

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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Google Guava BiMaps的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。