JavaにおけるList効率の比較


inkfishオリジナルですので、商業的に転載しないでください.転載はソースを明記してください.http://blog.csdn.net/inkfish を選択します
Java Collection s Fraamewark(JCF)はJava SEの中の基本的なクラスの一つで、ほとんどのプロジェクトが使用されます.そのうちのListはJCFの中で最も一般的なインターフェースです.Listインターフェースをめぐっては、よく使われているArrayListLinkedListVectorStackなどの多くの実装があり、また、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;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.ランダム挿入、ランダム削除動作では、Vectorが最も効率的である.2.追加、反復が必要な環境では、TreeListが最も効率的である.3.平均効率では、LinkedListが相対的にバランスがとれているが、海量がランダムに操作すると、パフォーマンスのボトルネックが生じる.4.ArrayListは、スレッドの安全のため、性能が低下する.低いので、慎重に使います.5.CopyOnWriteArrayListは伝説のように低い効率ではありません.6.VectorStackにしてもいいです.しかし、語義的にはListは多すぎるStackのことをすべきではありません.7.並べ替えの中でListは最高の性能を持っています.ArrayListの平均性能もいいです.TreeListの並べ替え効率は元素によって初めてです.開始状態の影響が大きい.8.各種LinkedList間の変換にはほとんど時間ロスがない.http://blog.csdn.net/inkfish)