2014-09-11 143 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