Google Guava BiMaps
接下來的番石榴之旅,是另一種有用的收藏類型BiMap 。 實際上,這非常簡單,BiMap只是雙向地圖。
反轉地圖
普通的Java映射是一組鍵和值,您可以按鍵查找值,這非常有用,例如,說我想創建一個(非常原始的)英式英語到美式英語詞典:
但是,如果您要一本美英詞典呢? 好吧,您可以編寫一些代碼來反轉地圖:
// 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方法。 它實際上是原始地圖的視圖 。 這意味著對逆方法的任何后續更改都會影響原始地圖!
正如我所說的,這就是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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 防DDOS(sh防止ddos封ip)
- 下一篇: 肇庆市房管局房屋备案查询(房管局房屋备案