摘要:尼古拉斯沃茲基碩德我們已經(jīng)有了,為什么還需要另外一個(gè)庫(kù)呢因?yàn)楹糜脝h日常編碼中經(jīng)常會(huì)遇到下面的代碼經(jīng)過(guò)的修剪后可以變成這樣甚至這樣其實(shí)這種結(jié)構(gòu),就是一個(gè)二維映射,把它包裝成了。但的完美處理雙向映射。當(dāng)然,在使用時(shí),會(huì)要求的唯一性。
1. Google CollectionsGoogle Guava是把小巧又鋒利的瑞士軍刀,把你的代碼修剪得整潔又漂亮。
-------------尼古拉斯·沃茲基碩德
我們已經(jīng)有Apache Commons Collections了,為什么還需要另外一個(gè)collections庫(kù)呢?
因?yàn)楹糜脝h!
日常編碼中經(jīng)常會(huì)遇到下面的代碼:
Map> map = new HashMap >();
經(jīng)過(guò)Guava的修剪后可以變成這樣:
Map> map = Maps.newHashMap();
甚至這樣:
Tabletab = HashBaseTable.create(); //其實(shí)這種結(jié)構(gòu),就是一個(gè)二維映射,Guava把它包裝成了table。 //還沒(méi)完,變成這樣后,訪問(wèn)起來(lái)比之前方便多了,直接拿兩個(gè)維度去拿結(jié)果。 String res = tab.get("1", "1");
當(dāng)然Lists和Sets也有這樣的用法:
Lists.newArrayList();
Sets.newHashSet();
有時(shí)候我們需要一些測(cè)試數(shù)據(jù)構(gòu)造一個(gè)不可變的List,一般都會(huì)這么寫:
Listlist = new ArrayList (); list.add("a"); list.add("b"); list.add("c"); list.add("d");
有了Guava可以這樣:
ImmutableListof = ImmutableList.of("a", "b", "c", "d");
Map也一樣
ImmutableMapmap = ImmutableMap.of("key1", "value1", "key2", "value2");
有時(shí)候要用到雙向映射,比如說(shuō)根據(jù)學(xué)號(hào)查詢名字和根據(jù)名字查詢學(xué)號(hào),這時(shí)候一般都需要建兩個(gè)Map分別由學(xué)號(hào)映射到名字,由名字映射到學(xué)號(hào)。
但Guava的BiMap完美處理雙向映射。
BiMapidNameMap = HashBiMap.create(); idNameMap.put(1,"xiaohong"); idNameMap.put(2,"xiaoming"); idNameMap.put(3,"xiaolan"); System.out.println("idNameMap:"+idNameMap); BiMap nameIdMap = idNameMap.inverse(); System.out.println("nameIdMap:"+nameIdMap);
當(dāng)然,在使用BiMap時(shí),會(huì)要求Value的唯一性。如果value重復(fù)了則會(huì)拋出錯(cuò)誤:java.lang.IllegalArgumentException。
inverse()會(huì)返回一個(gè)反轉(zhuǎn)的BiMap,但是注意這個(gè)反轉(zhuǎn)的map不是新的map對(duì)象,只是與原始map的一種關(guān)聯(lián),這樣你對(duì)于反轉(zhuǎn)后的map的所有操作都會(huì)影響原始的map對(duì)象。
為了從文件中讀取內(nèi)容一般操作如下:
File file = new File(getClass().getResource("/aaa.txt").getFile()); BufferedReader reader; String text = ""; try { reader = new BufferedReader(new FileReader(file)); String line = null; while (true) { line = reader.readLine(); if (line == null) { break; } text += line.trim() + " "; } reader.close(); reader = null; } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
Guava看了之后說(shuō):太長(zhǎng)了,看我的:
File file = new File(getClass().getResource("/aaa.txt").getFile()); Listlines = null; try { lines = Files.readLines(file, Charsets.UTF_8); } catch (IOException e) { e.printStackTrace(); }
整個(gè)世界清靜了!
未完待續(xù)···文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/70350.html
摘要:最基本的區(qū)別是會(huì)一直保存所有添加的元素,直到顯式地移除。相對(duì)地,為了限制內(nèi)存占用,通常都設(shè)定為自動(dòng)回收元素。消息接收方消息發(fā)起方同步異步注冊(cè)事件觸發(fā)事件處理這個(gè)錯(cuò)誤可能是由于中對(duì)應(yīng)方法拋出了異常。 緩存 Guava Cache提供了內(nèi)存緩存功能。內(nèi)存緩存需要考慮很多問(wèn)題,包括并發(fā)問(wèn)題,緩存失效機(jī)制,內(nèi)存不夠用時(shí)緩存釋放,緩存的命中率,緩存的移除等等。 當(dāng)然這些東西Guava都考慮到了。...
摘要:緩存總體可分為兩種集中式緩存和分布式緩存集中式緩存與分布式緩存的區(qū)別其實(shí)就在于集中與非集中的概念,其對(duì)象可能是服務(wù)器內(nèi)存條硬盤等。內(nèi)存條版本緩存集中在一臺(tái)服務(wù)器的一條內(nèi)存條上,為集中式緩存。 背景 緩存的主要作用是暫時(shí)在內(nèi)存中保存業(yè)務(wù)系統(tǒng)的數(shù)據(jù)處理結(jié)果,并且等待下次訪問(wèn)使用。在日長(zhǎng)開(kāi)發(fā)有很多場(chǎng)合,有一些數(shù)據(jù)量不是很大,不會(huì)經(jīng)常改動(dòng),并且訪問(wèn)非常頻繁。但是由于受限于硬盤IO的性能或者遠(yuǎn)程...
摘要:緩存總體可分為兩種集中式緩存和分布式緩存集中式緩存與分布式緩存的區(qū)別其實(shí)就在于集中與非集中的概念,其對(duì)象可能是服務(wù)器內(nèi)存條硬盤等。內(nèi)存條版本緩存集中在一臺(tái)服務(wù)器的一條內(nèi)存條上,為集中式緩存。 背景 緩存的主要作用是暫時(shí)在內(nèi)存中保存業(yè)務(wù)系統(tǒng)的數(shù)據(jù)處理結(jié)果,并且等待下次訪問(wèn)使用。在日長(zhǎng)開(kāi)發(fā)有很多場(chǎng)合,有一些數(shù)據(jù)量不是很大,不會(huì)經(jīng)常改動(dòng),并且訪問(wèn)非常頻繁。但是由于受限于硬盤IO的性能或者遠(yuǎn)程...
摘要:前言在上文源碼分析原理中分析了的相關(guān)原理。我在北京模擬執(zhí)行你在哪兒回復(fù)最后執(zhí)行結(jié)果開(kāi)始提問(wèn)提問(wèn)完畢,我去干其他事了收到消息你在哪兒等待響應(yīng)中。。。。。回復(fù)我在北京這樣一個(gè)模擬的異步事件回調(diào)就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源碼分析...
摘要:前言在上文源碼分析原理中分析了的相關(guān)原理。我在北京模擬執(zhí)行你在哪兒回復(fù)最后執(zhí)行結(jié)果開(kāi)始提問(wèn)提問(wèn)完畢,我去干其他事了收到消息你在哪兒等待響應(yīng)中。。。。。回復(fù)我在北京這樣一個(gè)模擬的異步事件回調(diào)就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源碼分析...
閱讀 1487·2021-10-14 09:43
閱讀 1453·2021-10-09 09:58
閱讀 1946·2021-09-28 09:42
閱讀 3737·2021-09-26 09:55
閱讀 1763·2021-08-27 16:23
閱讀 2765·2021-08-23 09:46
閱讀 915·2019-08-30 15:55
閱讀 1432·2019-08-30 15:54