我已經在通過程序遍歷鏈表被檢查的每個 VS 迭代性能:哪個性能更好:對於LinkedList中的每個或迭代器?
public class ListTraversePerformance {
public static void main(String... args){
List<String> list = new LinkedList<String>();
for(int i=0;i<100000;i++){
list.add("Any String" + i);
}
Iterator i = list.iterator();
String x;
long t1 = System.currentTimeMillis();
for(String j: list){
x = j;
}
long t2 = System.currentTimeMillis();
while(i.hasNext()){
x= (String)i.next();
}
long t3 = System.currentTimeMillis();
System.out.print((t2-t1) + " " + (t3-t2));
}
}
的輸出繼電器,我得到的是不同的每一次即有時第一循環跑得快,有時第二。
我的問題:
我覺得每個循環應該運行比第二迭代緩慢。我認爲在for each
循環中,鏈表應該從頭開始遍歷,每次複雜度爲O(n^2)
,而O(n)
複雜度爲Iterator
。我對麼?如果是,那麼爲什麼結果不如我預期的那樣...
LinkedList總是從開始節點遍歷到結束。 – 2014-09-10 09:57:49
不,你不正確。每次foreach循環不需要從頭開始迭代。 – Sneftel 2014-09-10 10:01:26
@JunedAhsan我有一個想法,我的問題是爲什麼不是爲每個循環運行緩慢。 – sagar 2014-09-10 10:01:36