




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
幾種Java集合框架詳解Java集合框架Koloboke詳解作者:chszs,未經(jīng)博主允許不得轉(zhuǎn)載。經(jīng)許可的轉(zhuǎn)載需注明作者和博客主頁(yè):/chszsKoloboke的目標(biāo)是替換標(biāo)準(zhǔn)的Java集合和流的API,提供更高效的實(shí)現(xiàn)。Koloboke目前的版本主要是替換java.util.HashSet和java.util.HashMap。Koloboke提供了一套完整的集合原始類型的實(shí)現(xiàn),可以避免開(kāi)銷很大的裝箱/拆箱操作,節(jié)省了原始類型裝箱消耗的內(nèi)存在Koloboke中,HashSet和HashMap比其它專門的實(shí)現(xiàn)(比如GScollections、fastutil、HTTP&Trove)要更快,這是因?yàn)椋?)相比于其它庫(kù),Koloboke對(duì)每個(gè)entry使用了更少的內(nèi)存Koloboke目標(biāo)是把鍵和值存儲(chǔ)在同一行高速緩存中所有的方法都經(jīng)過(guò)了實(shí)現(xiàn)優(yōu)化,而不是像AbstractSet類或AbstractMap類那樣委托給框架類(SkeletonClass)Koloboke的官網(wǎng):http://chronicle.software/products/koloboke-collections/Koloboke的特征:1)極好的兼容Java集合框架(JCF,JavaCollectionsFramework)2)所有原始專門的集合類都繼承了基本的接口(比如Collection、Set、Map)3)可用于替換標(biāo)準(zhǔn)的JCF4)KolobokeAPIforJava6andJava7向前兼容Java8的新方法5)快速失敗的語(yǔ)義6)支持null鍵(可選的),就像java.util.HashMap中的Float.NaN和Double.NaN鍵的處理那樣。什么時(shí)候使用ChronicleMap或KolobokeMap?使用ChronicleMap的場(chǎng)景:1) 存儲(chǔ)的entry超過(guò)5億條2) 在進(jìn)程之間分布Map3)使用堆外內(nèi)存(Off-HeapMemory),因?yàn)殒I和值占用了太多的內(nèi)存,JVM遭遇GC的痛苦當(dāng)不想在進(jìn)程間共享數(shù)據(jù),且存儲(chǔ)的entry在5億條以內(nèi),那么Koloboke是更理想的選擇oKoloboke目前的最新版本為068版??梢詮腗aven倉(cāng)庫(kù)使用它:<dependency><groupId>net.openhft</groupId><artifactId>koloboke-api-jdk8</artifactId><version>0.6.8</version></dependency><dependency><groupId>net.openhft</groupId><artifactId>koloboke-impl-jdk8</artifactId><version>0.6.8</version></dependency>Gradle依賴為dependencies{//'jdk8'insteadof'jdk6-7'ifyouuseJava8compile'net.openhft:koloboke-api-jdk6-7:0.6.8'runtime'net.openhft:koloboke-impl-jdk6-7:0.6.8'}也可以到這里下載:/OpenHFT/Koloboke/releasesJava集合框架GSCollections詳解作者:chszs,未經(jīng)博主允許不得轉(zhuǎn)載。經(jīng)許可的轉(zhuǎn)載需注明作者和博客主頁(yè):/chszsGSCollections是一個(gè)開(kāi)源的基于Java的集合框架,它兼容JDK的List、Set、Map實(shí)現(xiàn),并提供了一套功能豐富的API和工具類集合,其迭代循環(huán)的實(shí)現(xiàn)是受Smalltalk集合框架的啟發(fā)。GSCollections庫(kù)的模塊兼容Java5,包括gs-collections-api,gs-collections,gs-collections-testutils。GSCollections目前的最新版本為7.0.0版。主頁(yè)見(jiàn):/goldmansachs/gs-collectionsGSCollections特性:1)改進(jìn)了易讀性,減少了迭代循環(huán)代碼的重復(fù)2)實(shí)現(xiàn)了數(shù)個(gè)高級(jí)迭代模式(選擇select、拒絕reject、收集collect、注入inject)人性化的容器接口繼承了標(biāo)準(zhǔn)JDK的接口。)對(duì)于Collections、Arrays、Maps、Strings等提供了一致的迭代機(jī)制)對(duì)標(biāo)準(zhǔn)的ArrayList、HashSet和HashMap提供了經(jīng)過(guò)優(yōu)化的高性能、低內(nèi)存利用率的替代在工具類中執(zhí)行了更多幕后的優(yōu)化封裝了很多結(jié)構(gòu)復(fù)雜的并行迭代和懶惰估算添加了新的容器,包括Bag、Interval、Multimap、BiMap,以及提供了很多容器類型的不可變(Immutable)版本從2005年開(kāi)始發(fā)布,是一個(gè)成熟的庫(kù)GSCollections的使用:GSCollections把迭代豐富仿照容器類型中,并使用匿名的內(nèi)部類來(lái)模擬Lambdas表達(dá)式。GSCollections的編程風(fēng)格如下面代碼所示:MutableList<Person>people=FastList.newListWith(person1,person2,person3);MutableList<String>sortedLastNames=people.collect(Person.TO_LAST_NAME).sortThis();System.out.println("Commaseparated,sortedlastnames:"+sortedLastNames.makeString());Person.TO丄AST_NAME被定義為Person類的一個(gè)常量函數(shù)publicstaticfinalFunction<Person,String>TO_LAST_NAME=newFunction<Person,String>(){publicStringvalueOf(Personperson){returnperson.lastName;}};對(duì)于Java8,此函數(shù)可以使用Lambda表達(dá)式替代:MutableList<String>sortedLastNames=people.collect(person->person.getLastName()).sortThis();或者是用方法引用替代:MutableList<String>sortedLastNames=people.collect(Person::getLastName).sortThis();GSCollections的Maven依賴<dependency><groupId>com.goldmansachs</groupId><artifactId>gs-collections-api</artifactId><version>7.0.0</version></dependency><dependency><groupId>com.goldmansachs</groupId><artifactId>gs-collections</artifactId><version>7.0.0</version></dependency><dependency><groupId>com.goldmansachs</groupId><artifactId>gs-collections-testutils</artifactId><version>7.0.0</version><scope>test</scope></dependency><dependency><groupId>com.goldmansachs</groupId><artifactId>gs-collections-forkjoin</artifactId><version>7.0.0</version></dependency>Gradle依賴為dependencies{compile'com.goldmansachs:gs-collections-api:7.0.0'compile'com.goldmansachs:gs-collections:7.0.0'testCompile'com.goldmansachs:gs-collections-testutils:7.0.0'compile'com.goldmansachs:gs-collections-forkjoin:7.0.0'}另外幾種Java集合框架詳解作者:chszs,未經(jīng)博主允許不得轉(zhuǎn)載。經(jīng)許可的轉(zhuǎn)載需注明作者和博客主頁(yè):/chszs1、fastutilfastutil是一個(gè)開(kāi)源的Java集合框架的擴(kuò)展它繼承了JavaCollectionFramework,提供了數(shù)種特定類型的容器,包括映射map、集合set、列表list、優(yōu)先級(jí)隊(duì)列(prorityqueue),實(shí)現(xiàn)了java.util包的標(biāo)準(zhǔn)接口(還提供了標(biāo)準(zhǔn)類所沒(méi)有的雙向迭代器),還提供了很大的(64位)的array、set、list,以及快速、實(shí)用的二進(jìn)制或文本文件的I/O操作類。fastutil為專用的集合類提供了大容量的功能,而且類比普通Java集合類顯得更緊湊、速度更快。除了對(duì)象和原始類型,fastutil類還提供了對(duì)引用的支持,也即對(duì)象是可以使用等號(hào)操作符進(jìn)行比較的,無(wú)需使用equals()方法。fastutil以Apache2.0許可證發(fā)布。使用它需要JDK7以上版本。fastutil以JAR包的方式提供,要注意這個(gè)JAR包文件比較大,因?yàn)樗舜罅康念愇募H绻阒幌胍猣astutil的一部分,那么應(yīng)該考慮實(shí)用AutoJar之類的根據(jù)來(lái)自動(dòng)提取所需的類。官網(wǎng)地址:http://fastutil.di.unimi.it/相似的技術(shù):HPPC、Koloboke、GSCollections、TroveCollections、MahoutCollectionsfastutil目前的最新版本為7.0.10版這個(gè)最新的JAR包fastutil-7.0.10.jar大小為仃MB。其Maven依賴為:<dependency><groupId>it.unimi.dsi</groupId><artifactId>fastutil</artifactId><version>7.0.10</version></dependency>fastutil的在線API文檔見(jiàn):http://fastutil.di.unimi.it/docs/fastutil6在大數(shù)據(jù)方面進(jìn)行了增強(qiáng),提供了一套新的類集合使得可以處理很大的集合,尤其是當(dāng)集合數(shù)據(jù)超過(guò)2GB(2八31)時(shí)。比如HashBigSet僅僅受內(nèi)存大小的限制。2、HPPC官網(wǎng)地址:/hppc.html官網(wǎng)地址:/carrotsearch/hppcHPPC即HighPerformancePrimitiveCollectionsforJava,對(duì)Java的原始集合類型如映射map、集合set、堆棧stack、列表list、隊(duì)列deque等進(jìn)行了擴(kuò)展,提供了更佳的內(nèi)存利用率,帶來(lái)了更好的性能。HPPC當(dāng)前的最新版本為0.7.13、Trove官網(wǎng)地址:/Trove庫(kù)提供了高速的Java集合類。GNUTrove庫(kù)有兩個(gè)目標(biāo):1)提供一個(gè)免費(fèi)、高速、輕量級(jí)的java.util集合API的實(shí)現(xiàn)。這些實(shí)現(xiàn)被設(shè)計(jì)成可插撥的方式,以便替代標(biāo)準(zhǔn)JDK的集2)提供原始的集合,API風(fēng)格保持一致。標(biāo)準(zhǔn)JDK使用包裝器類來(lái)封裝原始類型,比如java.lang.Integer,java.lang.Float等,那么標(biāo)準(zhǔn)集合類也使用了包裝后的類型。而對(duì)于Trove庫(kù)來(lái)說(shuō),集合直接存儲(chǔ)原始類型可以減少空間的使用量,并能帶來(lái)顯著的性能提升。GNUTrove庫(kù)既可以用于服務(wù)器端應(yīng)用,也可以用于客戶端應(yīng)用,它消耗的內(nèi)存比標(biāo)準(zhǔn)集合框架更少。GNUTrove庫(kù)目前的最新版本為3.0.3版,很成熟的一個(gè)庫(kù)。應(yīng)注意,Trove已經(jīng)很久沒(méi)更新了,此項(xiàng)目可以不予考慮。4、MahoutCollections官網(wǎng)地址:/users/basics/mahout-collections.htmlMahoutCollections庫(kù)是一套容器類集合,它致力于解決標(biāo)準(zhǔn)Java集合框架的一些限制。MahoutCollections主要解決兩方面的問(wèn)題:Java標(biāo)準(zhǔn)集合框架缺乏對(duì)原始類型的支持Java標(biāo)準(zhǔn)集合框架缺乏對(duì)openhashing的支持另外幾種Java集合框架詳解續(xù)作者:chszs,未經(jīng)博主允許不得轉(zhuǎn)載。經(jīng)許可的轉(zhuǎn)載需注明作者和博客主頁(yè):/chszsfastutil庫(kù)優(yōu)于Trove庫(kù)的地方:Trove庫(kù)已經(jīng)三年未更新了,屬于非活躍的開(kāi)源項(xiàng)目;而fastutil一直在更新。fastutil有更豐富的特性,支持超大的集合(大于2八32,即4GB的集合),文檔也更豐富。fastutil是一個(gè)開(kāi)源的Java集合框架的擴(kuò)展,它繼承了JavaCollectionFramework,提供了數(shù)種特定類型的容器,包括映射map、集合set、列表list、優(yōu)先級(jí)隊(duì)列(prorityqueue),實(shí)現(xiàn)了java.util包的標(biāo)準(zhǔn)接口(還提供了標(biāo)準(zhǔn)類所沒(méi)有的雙向迭代器),還提供了很大的(64位)的array、set、list,以及快速、實(shí)用的二進(jìn)制或文本文件的I/O操作類。fastutil為專用的集合類提供了大容量的功能,而且類比普通Java集合類顯得更緊湊、速度更快。除了對(duì)象和原始類型,fastutil類還提供了對(duì)引用的支持,也即對(duì)象是可以使用等號(hào)操作符進(jìn)行比較的,無(wú)需使用equals()方法。fastutil以Apache2.0許可證發(fā)布。使用它需要JDK7以上版本。把元素添加到fastutil集合與添加到標(biāo)準(zhǔn)Java集合使用的API是相同的,下面的代碼示例展示了插入元素到標(biāo)準(zhǔn)JDK的ArrayList和插入元素到fastutil的DoubleArrayList。1、插入Double對(duì)象到JDK的ArrayList和插入Double對(duì)象到fastutil的DoubleArrayListimportjava.util.ArrayList;importit.unimi.dsi.fastutil.doubles.DoubleArrayList;publicclassDoubleArrayListTest{publicstaticvoidmain(String[]args){demoJdkArrayListForDoubles();demoFastutilArrayListForDoubles();}publicstaticvoiddemoJdkArrayListForDoubles(){finalArrayList<Double>doubles=newArrayList<>();doubles.add(98.5);doubles.add(24.7);doubles.add(52.8);doubles.add(1234.3);doubles.add(20.0);System.out.println("\tDoublesList:"+doubles);}publicstaticvoiddemoFastutilArrayListForDoubles(){finalDoubleArrayListdoubles=newDoubleArrayList();doubles.add(98.5);doubles.add(24.7);doubles.add(52.8);doubles.add(1234.3);doubles.add(20.0);System.out.println("\tFastutilDoubleArrayList:"+doubles);}輸出為:DoublesList:[98.5,24.7,52.8,1234.3,20.0]FastutilDoubleArrayList:[98.5,24.7,52.8,1234.3,20.0]從上面的代碼可以看岀,fastutil集合的實(shí)現(xiàn)與標(biāo)準(zhǔn)JDK集合的實(shí)現(xiàn)保持了一致。下面我們?cè)倏匆粋€(gè)例子:2、使用fastutil的DoubleArrayList作為堆棧publicstaticvoiddemoFastutilDoubleStack(){finalDoubleArrayListstack=newDoubleArrayList();stack.push(19.9);stack.push(32.1);stack.push(11.8);stack.push(3.3);System.out.println("FastutilStackofDoubles");System.out.println("\tPeek:"+stack.peek(0)+";AfterSize:"+stack.size());System.out.println("\tPop:"+stack.pop()+";AfterSize:"+stack.size());System.out.println("\tPeek:"+stack.peek(0)+";AfterSize:"+stack.size());輸岀為:FastutilStackofDoublesPeek:3.3;AfterSize:4Pop:3.3;AfterSize:3Peek:11.8;AfterSize:3應(yīng)注意DoubleArrayList的peek()方法和pop()方法均已被廢棄,DoubleArrayList繼承了AbstractDoubleList,抽象類AbstractDoubleList中廢棄了peek()方法和pop()方法,官方建議應(yīng)直接使用具體的指定類型的類提供的方法,這里也就是add()方法和getDouble()方法。Trove庫(kù)提供了gnu.trove.TCollections類,它類似于java.util.Collections,可看作是一個(gè)子集。fastutil提供了相似的功能,但是它提供的是靜態(tài)方法,且被分到指定類型或指定結(jié)構(gòu)的集合類中。比如IntSets類,與IntLinkedOpenHashSet結(jié)合使用,正如其名字,是指定了整型類型的集合類,提供了相應(yīng)的靜態(tài)方法。3、IntSets與IntLinkedOpenHashSet結(jié)合使用publicstaticvoiddemofastutilCollectionsClass(){finalIntLinkedOpenHashSetintegers=newIntLinkedOpenHashSet();integers.add(43);integers.add(4);integers.add(8);integers.add(6);finalIntSetunmodifiableIntegers=IntSets.unmodifiable(integers);System.out.println("UnmodifiableIntegers:");System.out.println("\tClass:"+unmodifiableIntegers.getClass().getCanonicalName());try{unmodifiableIntegers.add(15);}catch(Exceptione){System.out.println("\tExceptioncaught:"+e);}}輸岀為:UnmodifiableIntegers:Class:s.IntSets.UnmodifiableSetExceptioncaught:java.lang.UnsupportedOperationExceptionfastutil支持標(biāo)準(zhǔn)Java迭代方法,使用明確定義的迭代器和Java5引入的for-each循環(huán)。fastutil集合還支持JDK8風(fēng)格的.forEach()方法,因?yàn)閒astutil集合實(shí)現(xiàn)了java.util.Iterable接口。下面用代碼進(jìn)行說(shuō)明:4、fastutil集合以標(biāo)準(zhǔn)Java風(fēng)格進(jìn)行迭代publicstaticvoiddemoIterationWithIterator(){finalLongOpenHashSetlongs=newLongOpenHashSet();longs.add(11);longs.add(23401203413l);longs.add(3);longs.add(32);longs.add(9);finalLongIteratorlongIterator=longs.iterator();
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 綿陽(yáng)師范學(xué)院《臨床醫(yī)學(xué)工程技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海市高境第一中學(xué)2024-2025學(xué)年高三第二次綜合考試試題含解析
- 四川民族學(xué)院《機(jī)器人學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 許昌學(xué)院《醫(yī)學(xué)科學(xué)研究導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 宣化科技職業(yè)學(xué)院《新媒體藝術(shù)傳播》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川工業(yè)科技學(xué)院《結(jié)構(gòu)疲勞與斷裂力學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 邢臺(tái)學(xué)院《醫(yī)學(xué)人文導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東省德州市齊河縣一中2025年高三教學(xué)測(cè)試(二)英語(yǔ)試題含解析
- 嘉應(yīng)學(xué)院《創(chuàng)新方法與實(shí)踐(以競(jìng)賽導(dǎo)向的信息技術(shù)創(chuàng)新實(shí)踐)》2023-2024學(xué)年第二學(xué)期期末試卷
- 石家莊二手房房屋買賣合同二零二五年
- 復(fù)旦大學(xué)附屬眼耳鼻喉醫(yī)院耳鼻喉進(jìn)修匯報(bào)
- DB33-1036-2021《公共建筑節(jié)能設(shè)計(jì)標(biāo)準(zhǔn)》
- 巖芯鑒定手冊(cè)
- 快速排序算法高校試講PPT
- 甘肅歷史與甘肅文化
- 工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)
- 高邊坡施工危險(xiǎn)源辨識(shí)及分析
- 江蘇工業(yè)企業(yè)較大以上風(fēng)險(xiǎn)目錄
- 《村衛(wèi)生室管理辦法(試行)》課件(PPT 49頁(yè))
- 監(jiān)理質(zhì)量評(píng)估報(bào)告(主體分部)
- 鍋爐爆炸事故演練方案(模板)
評(píng)論
0/150
提交評(píng)論