Java數組和各種List的性能比較


以下程序分別對Java數組、ArrayList、LinkedList和Vector進行隨機訪問和迭代等操作,並比較這種集合的性能。

package cn.lion.test; 
public class PerformanceTest {
        
         privatestatic final int SIZE =100000;
         publicstatic abstract class Test{
                   privateString operation;
                   publicTest(String operation){
                            this.operation= operation;
                   }
                   publicabstract void test(List<String> list);
                   publicString getOperation(){
                            returnoperation;
                   }
         }
         //執行迭代操作的匿名類
         staticTest iterateTest = new Test("iterate"){
                   publicvoid test(List<String> list){
                            for(inti=0; i<10; i++){
                                     Iterator<String>it = list.iterator();
                                     while(it.hasNext()){
                                               it.next();
                                     }
                            }
                   }
         };
         //執行隨機訪問的匿名類
         staticTest getTest = new Test("get"){
                   publicvoid test(List<String> list){
                            for(inti=0; i<list.size(); i++){
                                     for(intk=0; k<10; k++){
                                               list.get(k);
                                     }
                            }
                   }
         };
         //執行插入的匿名類
         staticTest insertTest = new Test("insert"){
                   publicvoid test(List<String> list){
                            ListIterator<String>it = list.listIterator(list.size()/2);
                            for(inti=0; i<SIZE; i++){
                                     it.add("lion");
                            }
                   }
         };
         //執行刪除的匿名類
         staticTest removeTest = new Test("remove"){
                   publicvoid test(List<String> list){
                            ListIterator<String>it = list.listIterator();
                            while(it.hasNext()){
                                     it.next();
                                     it.remove();
                            }
                   }
         };
         staticpublic void testArray(List<String> list){
                   Test[]tests = {iterateTest, getTest};
                   test(tests,list);
         }
         staticpublic void testList(List<String> list){
                   Test[]tests = {insertTest, iterateTest, getTest, removeTest};
                   test(tests,list);
         }
         staticpublic void test(Test[] tests, List<String> list){
                   for(inti=0; i<tests.length; i++){
                            System.out.print(tests[i].getOperation()+ "操作:");
                            longt1 = System.currentTimeMillis();
                            tests[i].test(list);
                            longt2 = System.currentTimeMillis();
                            System.out.print(t2-t1+ "ms");
                            System.out.println();
                   }
         }
         publicstatic void main(String[] args){
                  
                   List<String>list = null;
                   //測試數組的迭代和隨機訪問操作
                   System.out.println("------測試數組------");
                   String[]tstr = new String[SIZE];
                   Arrays.fill(tstr,"lion");
                   list= Arrays.asList(tstr);
                   testArray(list);
                  
                   tstr= new String[SIZE/2];
                   Collection<String>coll = Arrays.asList(tstr);
                  
                   //測試Vector
                   System.out.println("------測試Vector------");
                   list= new Vector<String>();
                   list.addAll(coll);
                   testList(list);
                  
                   //測試LinkedList
                   System.out.println("------測試LinkedList------");
                   list= new LinkedList<String>();
                   list.addAll(coll);
                   testList(list);
                  
                   //測試ArrayList
                   System.out.println("------測試Vector------");
                   list= new ArrayList<String>();
                   list.addAll(coll);
                   testList(list);
         }
}

   程序運行結果如圖

從結果可以看出,對數組進行隨機訪問和迭代操作的速度是最快的;對LinkedList進行插入和刪除操作的速度是最快的;對ArrayList進行隨機訪問的速度也很快;Vector類在各方面沒有突出的性能,且此類已不提倡使用了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM