Google Guava BiMaps
接下來的番石榴之旅,是另一種有用的收藏類型BiMap 。 實(shí)際上,這非常簡單,BiMap只是雙向地圖。
反轉(zhuǎn)地圖
普通的Java映射是一組鍵和值,您可以按鍵查找值,這非常有用,例如,說我想創(chuàng)建一個(gè)(非常原始的)英式英語到美式英語詞典:
但是,如果您要一本美英詞典呢? 好吧,您可以編寫一些代碼來反轉(zhuǎn)地圖:
// 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;}它可以完成工作,但是您可能需要考慮一些復(fù)雜問題。
- 我們?nèi)绾翁幚碓嫉貓D中的重復(fù)值? 此刻,它們將在反向圖中被無聲覆蓋。
- 如果我們想在反向地圖中放置一個(gè)新條目怎么辦? 我們還必須更新原始地圖! 這可能會(huì)令人討厭。
雙圖
好吧,你猜怎么著? BiMap就是為這種情況而設(shè)計(jì)的! 這就是您可能會(huì)使用它的方式。
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確實(shí)很簡單,但是有一些注意事項(xiàng)。
加強(qiáng)獨(dú)特性
首先,BiMap強(qiáng)制其值具有唯一性,如果您嘗試插入重復(fù)的值,則會(huì)給您一個(gè)非法的參數(shù)異常,即
britishToAmerican.put('pudding','dessert'); britishToAmerican.put('sweet','dessert'); // IllegalArgumentException.如果您需要添加已經(jīng)添加的值,則可以使用forcePut方法將重復(fù)的值覆蓋條目。
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逆法
要理解的另一個(gè)關(guān)鍵問題是inverse方法,它返回逆BiMap,即具有鍵和值進(jìn)行輪換的映射。
現(xiàn)在,此反向映射不僅僅是一個(gè)新映射,例如我先前創(chuàng)建的reverseMap方法。 它實(shí)際上是原始地圖的視圖 。 這意味著對(duì)逆方法的任何后續(xù)更改都會(huì)影響原始地圖!
正如我所說的,這就是BiMap。 像往常一樣,有幾種實(shí)現(xiàn)方式,并且我建議像以往一樣閱讀完整的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
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Google Guava BiMaps的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 防DDOS(sh防止ddos封ip)
- 下一篇: 肇庆市房管局房屋备案查询(房管局房屋备案