2014-09-11 94 views
0

我哈瓦一個列表中,當我走過它,這寫代碼遍歷List集合性能問題

for (int i = 0; i < list.size(); i++) 

這寫代碼

for (int i = 0,n = list.size(); i < n; i++) 

哪個更好,爲什麼?

+1

你的問題本質上是http://stackoverflow.com/questions/6093537/for-loop-optimization – 2014-09-11 02:03:25

回答

0

要添加點吉恩,在兩個for循環:

for (int i = 0; i < list.size(); i++ 

for (int i = 0,n = list.size(); i < n; i++) 

讓我們比較的情況:
案例1:
如果列表中的項目不會被修改,也就是說不會頻繁添加和刪除,然後第二個for循環會更好,因爲您將大小列表並將其放入一個變量並進行比較。而在第一個循環中,每次必須計算列表的大小。
案例2:
如果列表項將要經常更換(插入和刪除是多),那麼列表的大小是固定的是不是一個好主意。列表的大小必須每次都通過size()函數動態計算。所以在這種情況下,第一個for循環更好。如果你想使用第二個for循環,那麼在列表中進行更改後,重新計算列表的大小並再次存儲在n中,這是一個開銷。

2

既然你遍歷集合,使用的for-each ...

for(Object o : list) 
{ 
    //treatment... 
} 

至於那些你貼的區別,我敢肯定,JVM將無論如何優化它。

0

它沒有任何區別。 list.size()並不需要計算

/** 
* Returns the number of elements in this list. 
* 
* @return the number of elements in this list 
*/ 
public int size() { 
    return size; 
} 
+0

的重複如果你使用ArrayList,fori是最快的方法。如果你使用LinkedList,Foriter是最快的方法。 – isea 2014-09-11 02:18:40