生活随笔
收集整理的這篇文章主要介紹了
Java集合框架之fastutil
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
fastutil擴展了 Java集合框架,通過提供特定類型的map、set、list和queue,以及小內存占用、快速訪問和插入;也提供大(64位)array、set 和 list,以及快速、實用的 二進制文件和文本文件的I/O類。它是自由軟件,依照Apache許可證2.0發布,需要Java 6或更高版本。 類實現其標準接口(例如, map 的 Map),可以插入現有代碼。此外,它們還提供未在標準類的附加??功能(如雙向迭代器) 。 除了 對象和基本類型,fastutil類提供支持引用(references),即使用相等運算符,而不是比較對象的equals()方法。 源代碼由C預處理器生成,從一組驅動文件開始。您可以在查看javadoc生成的文檔。尤其是概述說明中fastutil使用的設計選擇。大數據結構 使用fastutil 6類的一組新類,使得它可以處理非常大的集合,特別是其規模超過2 31 。大數組是數組的數組,由一個神奇的靜態方如果是帶有64為索引的單位數組; big list 提供64位列表索引,hash big set 的 大小是只受限于核心內存量。常用的方法來自java.util.Arrays,類似的類已經擴展到大數組:可查看Javadoc關于 BigArrays和 IntBigArrays 的文檔,以獲得通用和特定類型的可用方法 。 http://fastutil.dsi.unimi.it/ 雖然JCF(Java Collections Framework)在設計做的很好,但是從性能很功能上都有一定的局限性,所有出現很多的擴展JDK的集合框架出現,除了fastutil之外,主要的JDK集合框架的擴展還有以下這么多,他們都各自有各自的特點,各有所長:
Apache Commons Collections Apache Commons Primitives Google Guava Trove Huge Collections Joda Primitives Javolution Goldman Sachs Collections
這里有一篇關于HashMap的性能測試:Large HashMap overview: JDK, FastUtil, Goldman Sachs, HPPC, Koloboke, Trove 由于fastutil提供了相當豐富的類,所以類庫很大,比如fastutil-6.4.3.jar就有14.5MB。但是他在性能上極佳! fastutil以存儲的元素類型來劃分package,每個package下都有豐富的Class。 如: ?? List、BigList、Map、SortedMap、Set、Stack、Iterator......
it.unimi.dsi.fastutil.booleans it.unimi.dsi.fastutil.bytes it.unimi.dsi.fastutil.chars it.unimi.dsi.fastutil.doubles it.unimi.dsi.fastutil.floats it.unimi.dsi.fastutil.ints it.unimi.dsi.fastutil.io it.unimi.dsi.fastutil.longs it.unimi.dsi.fastutil.objects it.unimi.dsi.fastutil.shorts
1、Int相關
Java代碼?
?
//===========IntList?? IntList?list?=?new?IntArrayList();?? ?? for(int?i?=?0;?i?<?1000;?i++){?? ????list.add(i);?? }?? ?? //取值?? int?value?=?list.getInt(0);?? System.out.println(value);//?0?? ?? //轉成數組?? int[]?values?=?list.toIntArray();?? System.out.println(values.length);//?1000?? ?? //遍歷?? IntListIterator?i?=?list.iterator();?? while(i.hasNext()){?? ????System.out.println(i.nextInt());?? }?? ?? //===========Int2BooleanMap?? Int2BooleanMap?map?=?new?Int2BooleanArrayMap();?? ?? map.put(1,?true);?? map.put(2,?false);?? ?? //取值?? boolean?value1?=?map.get(1);?? boolean?value2?=?map.get(2);?? ?? System.out.println(value1);//?true?? System.out.println(value2);//?false?? ?? //===========IntBigList?? IntBigList?biglist?=?new?IntBigArrayBigList();?? ?? biglist.add(0);?? biglist.add(1);?? biglist.add(2);?? ?? long?size?=?biglist.size64();?? ?? //取值?? for(long?index?=?0;?index?<?size;?index++)?{?? ????System.out.println(biglist.getInt(index));?? }?? ?? //===========IntSortedSet?? IntSortedSet?s?=?new?IntLinkedOpenHashSet(?new?int[]?{?4,?3,?2,?1?}?);?? //獲取第一個元素?? System.out.println(s.firstInt());?//?4?? //獲取最后一個元素?? System.out.println(s.lastInt());?//?1?? //判斷是否包含一個元素?? System.out.println(s.contains(5));?//?false??
2、Long相關
Java代碼?
?
Long2IntSortedMap?m?=?new?Long2IntAVLTreeMap();?? ?? m.put(?1,?5?);?? m.put(?2,?6?);?? m.put(?3,?7?);?? m.put(?1000000000L,?10?);?? ?? System.out.println(m.get(?1?));?//?5?? ?? //當查找不到的時候,默認返回0?? System.out.println(m.get(?4?));?//?0?? ?? //設置默認返回值?? m.defaultReturnValue(?-1?);?? System.out.println(m.get(?4?));?//?-1?? ?? //遍歷Map?? LongBidirectionalIterator?key1?=?m.keySet().iterator();?? long?s?=?0;?? while(?key1.hasNext()?)?{?? ????s?+=?key1.nextLong();?? }?? System.out.println(s);?//?1000000006?? ?? //獲取Key值小于4的子Map?? Long2IntSortedMap?m1?=?m.headMap(?4?);?? LongBidirectionalIterator?key2?=?m1.keySet().iterator();?? while(?key2.hasNext()?)?{?? ????System.out.println(key2.nextLong());?? }??
《新程序員》:云原生和全面數字化實踐 50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔 為你收集整理的Java集合框架之fastutil 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。