JavaにおけるList効率の比較
inkfishオリジナルですので、商業的に転載しないでください.転載はソースを明記してください.http://blog.csdn.net/inkfish を選択します
Java Collection s Fraamewark(JCF)はJava SEの中の基本的なクラスの一つで、ほとんどのプロジェクトが使用されます.そのうちの
こんなに多くの
テスト環境:プロセッサ:Intel Core 2 Duo P 8600 2.4 GHzメモリ:2 Gハードディスク:160 G 7200 rpm Java:SUN JDK 1.6.0_15開発環境:Eclipse 3.5第三者類庫:Appache comons-lang 2.4、Appache comons-collection s 3.2.1(出所:http://blog.csdn.net/inkfish)
主な試験対象:
試験用例:1.試験
テストコード:(ソース:http://blog.csdn.net/inkfish)
package testimport static java.lang.System.out;import java.util.ArayList;import java.util.coollections;import java.util.Iterator;import java.util.Linked List;import java.util.List;import java.util.Stck;import java.util.Vector;import java.util.co ncurrent.OnWriteArayList;import org.apache.co.comコレクションs.FastrayList;import org.apache.co.comコレクションs.list.TreeList;import org.apache.com mmons.lang.StringUtils;import org.apache.com mmons.lang.time.StopWatch;@Suppres Warnings(「uncheccked」)public class ListPerformanc{ public static void mamain(String[]args){ListPerformanctest=new ListPerformance(10*10000);out.print(StrigUtils. cdedenter))("Test============="List Pestastastastastastastastastastastastastastastastastastastastastastastastastastastastas"""""""""""""""""""""""""""""""""==============%10 s%10 s"、""、"add"、"insert"、"remove"、"get"、"set"、"iterator"test.benchmark(new FastArayList()、test.benchmark(new TreeList()、test.benchmark(new ArayList()、test.benchmark(new LinkdList()、test.benchmark.benchmark(new.benchmark)、test.benchmark.benchmark(new.benchmark.betttttttmark.Bmark/Mark/Mark(nettttmark)、tetttmark/Mark)、tettttmark(net.BBBB並べ替えout.print('/n/n);out.print(StringUtils.cnter)(「Test List sort Performance:loop=」+test.loop,80,'-');out.prinntf("/n%20 s%10 s%10 s%10 s"""""""""、""""、""""、""""""""""、test.benchmarkSort(new FastArayList");test.bencbenchmarthmarthmarthmartttttttttttttttt. bexxmarkLitttttttLittttttttttttttttttttttttttttttttttLits( SottttxxxxxxxxxxxxxxxxLi)///test.benchmarkSort(new Copy OnWriteArayList()//UnipportedOperation Exception test.benchmarkSort(new Vector);test.benchmarkSort(new Starck)//3.各種データ構造間変換out.print("/n/n");out.print(StrigUtils.cnter(「Test List convert Performance:loop=」+testloop="+te. loop,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Linked」「CopyOWrite」「Vector」)、test.benchmarkCovert(new FastrayList()test.benchmarkCovert(new TreeList();test.benchmarkCovert(new ArayList();test.benchmarkCovert(new CopyOnriteArayList();test.benchmarkCovert(new CopyOnWriteartrtrtrtrtrtrtrtratyList);LitytytytytyList(()))))));循環循環put* ppupupupupupupupupupupupupupupupupupupupupupupuppuput/put/put/put/putvoid benchmark(List list){out.printf('/n%20 s)、list.get Class().getSimpleName();int j;StopWatch Watch Watch=null、//1.テスト順序性能(Add)(watch=new StopWattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttch=new Stop Watch().start();for(int i=0;i0;i--){list.add(new Integer(i)))}(watch=new StopWatttch().start();Collectis.sort(list);watt. stop();out.prntf(「%10 d.wat. ttt. ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt);list.add(new Integer(j);}(watch=new StopWatch().start();Collection s.sort(list);watch.stop();out.printf(“%10 d”、watch.getTime();}
試験結果:(出所:http://blog.csdn.net/inkfish)
----------------Test List Performance:loop=100000----------------add insert remove get set iterator FastarrayList 16 8609 8360 15 47 TreeList 110 187,156,780 ArayList 15 8344 15 15 LinkdList 47 5080671 5986 List 5578 Cost66 0--------------Test List sort Performance:loop=100000---------optimize wost radom FastrayList 47 78 110 Tree List 15 47 110 ArayList 32 47 47 List 32 78 List 15 125 Vector 0 63 94 Stock 16 46------------------Test List converformance 1000rrayList 0 0 0 0 TreeList 0 0 0 ArayList 0 0 0 0 0 0 List 0 0 0 0 0 0 0 CopyOWriteArayList 0 0 0 0 0 0 0 0 0 0 0
結論:1.ランダム挿入、ランダム削除動作では、
Java Collection s Fraamewark(JCF)はJava SEの中の基本的なクラスの一つで、ほとんどのプロジェクトが使用されます.そのうちの
List
はJCFの中で最も一般的なインターフェースです.List
インターフェースをめぐっては、よく使われているArrayList
、LinkedList
、Vector
、Stack
などの多くの実装があり、また、Java 5の後に導入されたCopyOnWriteArrayList
もあり、Apple Collectionの様々なList
などのオープンソース実装があります.(ソース:http://blog.csdn.net/inkfish)こんなに多くの
List
が実現していますが、どうやって選択しますか?彼らの運行効率は具体的にどうですか?本論文では、最も一般的ないくつかのList
の実装を特定のコードで検出します.(ソース:http://blog.csdn.net/inkfish)テスト環境:プロセッサ:Intel Core 2 Duo P 8600 2.4 GHzメモリ:2 Gハードディスク:160 G 7200 rpm Java:SUN JDK 1.6.0_15開発環境:Eclipse 3.5第三者類庫:Appache comons-lang 2.4、Appache comons-collection s 3.2.1(出所:http://blog.csdn.net/inkfish)
主な試験対象:
List
(出所:http://blog.csdn.net/inkfish)試験用例:1.試験
java.util.ArrayList;
java.util.LinkedList;
java.util.Stack;
java.util.Vector;
java.util.concurrent.CopyOnWriteArrayList;
org.apache.commons.collections.FastArrayList;
org.apache.commons.collections.list.TreeList;
1.1順序追加1.2ランダム挿入1.3ランダム削除1.4ランダムアクセス1.5ランダム更新1.5順序反復2.試験List
3 3の場合の並べ替え効率2.1の初期時List
の中の要素は小さい順に並べられています(最適な場合)2.2初期時List
において、要素は大から小秩序配列(最悪の場合)2.3初期時にList
においてランダムに配列されていた.無秩序3.試験List
相互変換の効率3.1はList
3.2に変換してTreeList
3.3に変換してArrayList
3.4に変換してLinkedList
3.5に変換してCopyOnWriteArrayList
に変換する(出所:http://blog.csdn.net/inkfish)テストコード:(ソース:http://blog.csdn.net/inkfish)
package testimport static java.lang.System.out;import java.util.ArayList;import java.util.coollections;import java.util.Iterator;import java.util.Linked List;import java.util.List;import java.util.Stck;import java.util.Vector;import java.util.co ncurrent.OnWriteArayList;import org.apache.co.comコレクションs.FastrayList;import org.apache.co.comコレクションs.list.TreeList;import org.apache.com mmons.lang.StringUtils;import org.apache.com mmons.lang.time.StopWatch;@Suppres Warnings(「uncheccked」)public class ListPerformanc{ public static void mamain(String[]args){ListPerformanctest=new ListPerformance(10*10000);out.print(StrigUtils. cdedenter))("Test============="List Pestastastastastastastastastastastastastastastastastastastastastastastastastastastastas"""""""""""""""""""""""""""""""""==============%10 s%10 s"、""、"add"、"insert"、"remove"、"get"、"set"、"iterator"test.benchmark(new FastArayList()、test.benchmark(new TreeList()、test.benchmark(new ArayList()、test.benchmark(new LinkdList()、test.benchmark.benchmark(new.benchmark)、test.benchmark.benchmark(new.benchmark.betttttttmark.Bmark/Mark/Mark(nettttmark)、tetttmark/Mark)、tettttmark(net.BBBB並べ替えout.print('/n/n);out.print(StringUtils.cnter)(「Test List sort Performance:loop=」+test.loop,80,'-');out.prinntf("/n%20 s%10 s%10 s%10 s"""""""""、""""、""""、""""""""""、test.benchmarkSort(new FastArayList");test.bencbenchmarthmarthmarthmartttttttttttttttt. bexxmarkLitttttttLittttttttttttttttttttttttttttttttttLits( SottttxxxxxxxxxxxxxxxxLi)///test.benchmarkSort(new Copy OnWriteArayList()//UnipportedOperation Exception test.benchmarkSort(new Vector);test.benchmarkSort(new Starck)//3.各種データ構造間変換out.print("/n/n");out.print(StrigUtils.cnter(「Test List convert Performance:loop=」+testloop="+te. loop,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Linked」「CopyOWrite」「Vector」)、test.benchmarkCovert(new FastrayList()test.benchmarkCovert(new TreeList();test.benchmarkCovert(new ArayList();test.benchmarkCovert(new CopyOnriteArayList();test.benchmarkCovert(new CopyOnWriteartrtrtrtrtrtrtrtratyList);LitytytytytyList(()))))));循環循環put* ppupupupupupupupupupupupupupupupupupupupupupupuppuput/put/put/put/putvoid benchmark(List list){out.printf('/n%20 s)、list.get Class().getSimpleName();int j;StopWatch Watch Watch=null、//1.テスト順序性能(Add)(watch=new StopWattttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttch=new Stop Watch().start();for(int i=0;i
試験結果:(出所:http://blog.csdn.net/inkfish)
----------------Test List Performance:loop=100000----------------add insert remove get set iterator FastarrayList 16 8609 8360 15 47 TreeList 110 187,156,780 ArayList 15 8344 15 15 LinkdList 47 5080671 5986 List 5578 Cost66 0--------------Test List sort Performance:loop=100000---------optimize wost radom FastrayList 47 78 110 Tree List 15 47 110 ArayList 32 47 47 List 32 78 List 15 125 Vector 0 63 94 Stock 16 46------------------Test List converformance 1000rrayList 0 0 0 0 TreeList 0 0 0 ArayList 0 0 0 0 0 0 List 0 0 0 0 0 0 0 CopyOWriteArayList 0 0 0 0 0 0 0 0 0 0 0
結論:1.ランダム挿入、ランダム削除動作では、
Vector
が最も効率的である.2.追加、反復が必要な環境では、TreeList
が最も効率的である.3.平均効率では、LinkedList
が相対的にバランスがとれているが、海量がランダムに操作すると、パフォーマンスのボトルネックが生じる.4.ArrayList
は、スレッドの安全のため、性能が低下する.低いので、慎重に使います.5.CopyOnWriteArrayList
は伝説のように低い効率ではありません.6.Vector
をStack
にしてもいいです.しかし、語義的にはList
は多すぎるStack
のことをすべきではありません.7.並べ替えの中でList
は最高の性能を持っています.ArrayList
の平均性能もいいです.TreeList
の並べ替え効率は元素によって初めてです.開始状態の影響が大きい.8.各種LinkedList
間の変換にはほとんど時間ロスがない.http://blog.csdn.net/inkfish)