日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java fastutil_具有FastUtil的精简Java集合

發布時間:2023/12/3 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java fastutil_具有FastUtil的精简Java集合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java fastutil

針對我最近在GNU Trove庫上發表的《 發現Java原始資源集合的處理 》一書 , TheAlchemist指出了fastutil優于trove的一些優點:“我更喜歡fastutil( http://fastutil.di.unimi.it/ ),因為它仍在積極開發中,具有更多功能,支持大尺寸(> 2 ^ 32),并且具有更好的文檔。” 阿提拉-米哈伊·巴拉茲已借調第二個“I @ TheAlchemist的建議為fastutil:此! 這是一個很棒的圖書館。” 在這篇文章中,我從以前對trove的一些相同角度研究了fastutil 。

在fastutil主頁上,將fastutil描述為Java TM Collections Framework的擴展,它提供了“特定于類型的映射,集合,列表和隊列,具有較小的內存占用以及快速的訪問和插入”,以及“大型(64位)數組,設置和列表,以及用于二進制和文本文件的快速,實用的I / O類。” fastutil的許可證是Apache License,版本2 ,而fastutil的當前版本需要Java 7或更高版本。 當前(截至撰寫本文時), Java 6和Java 5也可以下載“未維護”的fastutil版本。

通過與標準Java集合使用的API調用相同的API調用來完成將元素添加到FastUtil集合的操作,如下面的代碼清單所示,該代碼列表比較了將元素插入JDK ArrayList和將元素插入FastUtil DoubleArrayList的過程 。

使用JDK插入雙打和使用FastUtil DoubleArrayList插入雙打

/*** Demonstrate standard JDK {@code ArrayList<Double>}* with some JDK 8 functionality.*/ public void demonstrateJdkArrayListForDoubles() {final ArrayList<Double> doubles = new ArrayList<>();doubles.add(15.5);doubles.add(24.4);doubles.add(36.3);doubles.add(67.6);doubles.add(10.0);out.println("JDK ArrayList<Double>:");out.println("\tDoubles List: " + doubles); }/*** Demonstrate use of DoubleArrayList and show how* similar using it is to using {@code ArrayList<Double>}.*/ public void demonstrateFastUtilArrayListForDoubles() {// Demonstrate adding elements to DoubleArrayList is// exactly like adding elements to ArrayList<Double>.final DoubleArrayList doubles = new DoubleArrayList();doubles.add(15.5);doubles.add(24.4);doubles.add(36.3);doubles.add(67.6);doubles.add(10.0);out.println("FastUtil DoubleArrayList:"); // DoubleArrayList overrides toString()out.println("\tDoubles List: " + doubles); }

當執行上述兩種方法時,寫入標準輸出的雙精度項列表看起來完全相同,即使用相同的方括號括住逗號分隔的雙精度值。

FastUtil集合傾向于實現適當的JDK集合接口。 例如,剛剛演示的類DoubleArrayList實現了幾個接口,包括Collection <Double>和List <Double>。 事實證明DoubleArrayList還實現了it.unimi.dsi.fastutil.doubles.DoubleStack和it.unimi.dsi.fastutil.Stack <Double> 。 下一個代碼清單中展示了使用此類作為堆棧的能力。

使用FastUtil的DoubleArrayList作為堆棧

/*** Demonstrate FastUtil's Double Stack.** FastUtil's DoubleStack allows access to its* contents via push, pop, and peek. It is declared* as a DoubleArrayList type here so that the size()* method is available without casting.*/ public void demonstrateFastUtilDoubleStack() {final DoubleArrayList stack = new DoubleArrayList();stack.push(15.5);stack.push(17.3);stack.push(16.6);stack.push(2.2);out.println("FastUtil Stack of Doubles");out.println("\tPeek: " + stack.peek(0) + "; After Size: " + stack.size());out.println("\tPop: " + stack.pop() + "; After Size: " + stack.size());out.println("\tPeek: " + stack.peek(0) + "; After Size: " + stack.size()); }

正如我在Trove上的博客文章中所討論的那樣,Trove提供了一個gnu.trove.TCollections類,該類與java.util.Collections類似(子集)。 FastUtil提供了類似的功能,但是這種提供靜態方法以對FastUtil集合起作用的方法通過靜態方法被分為特定于類型的類型和特定于結構的類,而不是在具有靜態方法的單個類中。 下一個代碼清單演示將這些特定于類型和特定于結構的類之一與靜態方法IntSets結合使用, 并將其與FastUtil IntLinkedOpenHashSet結合使用。 顧名思義, IntSets類提供了“使用[int]特定的集可以做有用的事情的靜態方法和對象。”

將IntSet與IntLinkedOpenHashSet一起使用

/*** Demonstrate one of FastUtil's "equivalent"s of the* java.util.Collections class. FastUtil separates its* grouping of static methods into classes that are* specific to the data type of the collection and to* the data structure type of the collection.*/ public void demonstrateFastUtilCollectionsClass() {final IntLinkedOpenHashSet integers = new IntLinkedOpenHashSet();integers.add(5);integers.add(7);integers.add(3);integers.add(1);final IntSet unmodifiableIntegers = IntSets.unmodifiable(integers);out.println("Unmodifiable Integers:");out.println("\tClass: " + unmodifiableIntegers.getClass().getCanonicalName());try{unmodifiableIntegers.add(15);}catch (Exception ex){out.println("\tException caught: " + ex);} }

FastUtil支持使用顯式迭代器和Java SE 5引入的for-each循環的標準Java迭代方法。 因為FastUtil集合實現java.lang.Iterable,所以FastUtil集合甚至使用.forEach支持JDK 8樣式 (假定代碼是在JDK 8上構建和運行的)。 這些將在下一個代碼清單中進行演示。

以標準Java樣式迭代FastUtil集合

/*** Demonstrate "traditional" Java iteration of a* FastUtil collection.*/ public void demonstrateIterationWithIterator() {final LongOpenHashSet longs = new LongOpenHashSet();longs.add(15);longs.add(6);longs.add(12);longs.add(13);longs.add(2);final LongIterator longIterator = longs.iterator();while (longIterator.hasNext()){final long longValue = longIterator.next();out.print(longValue + " ");} }/*** Demonstrate iteration of a FastUtil collection* using Java's enhanced for-each approach.*/ public void demonstrateIterationWithForEach() {final LongLinkedOpenHashSet longs = new LongLinkedOpenHashSet();longs.add(15);longs.add(6);longs.add(12);longs.add(13);longs.add(2);for (final long longValue : longs){out.println(longValue + " ");} }/*** Demonstrate iteration of a FastUtil collection* using JDK 8 .forEach approach.*/ public void demonstrateIterationWithJdk8ForEach() {final LongLinkedOpenHashSet longs = new LongLinkedOpenHashSet();longs.add(15);longs.add(6);longs.add(12);longs.add(13);longs.add(2);longs.forEach(longValue -> out.print(longValue + " ")); }

與FastUtil相關的其他觀察

  • 由于FastUtil集合實現標準的JDK 8集合接口,因此可以很容易地使用熟悉的Java習慣用法來獲取和使用這些API。
  • FastUtil集合通常提供一個構造函數,該構造函數接受基礎數據類型的數組以及重寫的toArray()方法和特定于類型的方法(例如toDoubleArray() [用于雙向定位的集合])以數組形式提供其數據元素。原語。
  • FastUtil集合通常提供顯式重寫的toString()實現,這些實現允許像JDK集合一樣輕松編寫各個數據元素,并且與Java數組(需要Arrays.toString()方法)不同。
  • FastUtil的Java程序包通常按原始類型進行組織,并且該原始類型的各種數據結構類型的特定實現都在同一程序包中進行。 例如,程序包的名稱類似it.unimi.dsi.fastutil.doubles , it.unimi.dsi.fastutil.ints等。
  • 因為每個FastUtil集合都特定于特定的原始數據類型,所以每個集合都不需要通用參數,并且沒有與通用相關的問題(例如擦除)。 我還沒有看到FastUtil像Trove一樣利用特定于類型的集合的特定于類型的方法,這可能是因為FastUtil更緊密地實現了相應的Java集合接口。
  • 學習使用FastUtil時, FastUtil的Javadoc API文檔可能是最佳的起點。 在FastUtil的基于Javadoc的API文檔中,類,接口,枚舉和包通常都記錄得很好。

結論

與Trove一樣,FastUtil是一個庫,可以用來更有效地(就內存和性能而言)與Java集合一起使用。 Trove似乎曾經是眾多選擇中最受歡迎的,而FastUtil也許是目前最受歡迎的,原因包括TheAlchemist引用的那些理由:“仍在積極開發中,具有更多功能,支持大尺寸(> 2 ^ 32 ),并具有更好的文檔。” 除了Trove和FastUtil之外, 類似的庫還包括Java的高性能基元集合 ( HPPC ), Koloboke , Goldman Sachs集合 , Mahout集合和Javolution 。

翻譯自: https://www.javacodegeeks.com/2016/01/leaner-java-collections-with-fastutil.html

java fastutil

總結

以上是生活随笔為你收集整理的java fastutil_具有FastUtil的精简Java集合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。