List 三種遍歷的方法


學習java語言list遍歷的三種方法,順便測試各種遍歷方法的性能,測試方法為在ArrayList中插入1千萬條記錄,然后遍歷ArrayList,發現了一個奇怪的現象,測試代碼如下:

 

package com.hisense.tiger.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest {
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
long t1,t2;
for(int j = 0; j < 10000000; j++)
{
list.add("aaaaaa" + j);
}
System.out.println("List first visit method:");
t1=System.currentTimeMillis();
for(String tmp:list)
{
//System.out.println(tmp);
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");
System.out.println("List second visit method:");

t1=System.currentTimeMillis();
for(int i = 0; i < list.size(); i++)
{
list.get(i);
//System.out.println(list.get(i));
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");

System.out.println("List Third visit method:");
Iterator<String> iter = list.iterator();

t1=System.currentTimeMillis();
while(iter.hasNext())
{
iter.next();
//System.out.println(iter.next());
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");

System.out.println("Finished!!!!!!!!");


}
}

 

測試結果如下:

List first visit method:
Run Time:170(ms)
List second visit method:
Run Time:10(ms)
List Third visit method:
Run Time:34(ms)
Finished!!!!!!!!

    測試的結論很奇怪,第一種方法是java語言支持的新語法,代碼最簡潔,但是在三種方法中,性能確是最差的,取size進行遍歷性能是最高的,求牛人解釋?

 

回答:

ArrayList底層是采用數組來保存數據的,對於訪問數組里的數據來說,直接采用數組索引當然是最快的了,相當於直接從內存讀取數據,其他的兩種迭代方式,實際上都是一種,即iterator,foreach包裝了一下;iterator遍歷最終還是要通過索引來訪問數據,源碼中對應的get方法了,但是除此之外,還要經過其他的檢查,所以耗時較多,但還在一個數量及上


免責聲明!

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



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