Java 遍历列表集合性能问题

Java 遍历列表集合性能问题,java,arraylist,Java,Arraylist,我有一个列表,当我遍历它时,这是一个编写代码的列表 for (int i = 0; i < list.size (); i++) for (int i = 0,n = list.size (); i < n; i++) for(inti=0;i

我有一个列表,当我遍历它时,这是一个编写代码的列表

for (int i = 0; i < list.size (); i++)
for (int i = 0,n = list.size (); i < n; i++) 
for(inti=0;i
还有这个书写代码

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

哪一个更好,为什么?

既然您是在集合上循环,请使用for each

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

至于你所发布的内容之间的区别,我非常肯定JVM会为你优化它。

这没有任何区别
list.size()
不需要计算

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

要在两个for循环中向Jean添加点,请执行以下操作:

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

for (int i = 0,n = list.size (); i < n; i++) 
for(inti=0;i
让我们比较一下情况:
案例1:
如果不修改列表项,即不进行频繁的添加和删除,则第二个for循环更好,因为您获取列表的大小并将其放入变量中进行比较。而在第一个循环中,每次都必须计算列表的大小。
案例二:

如果要频繁更改列表项(插入和删除更多),则固定列表的大小不是一个好主意。必须通过size()动态计算列表的大小每次函数。因此,在这种情况下,第一个for循环更好。如果要使用第二个for循环,则在列表中进行更改后,重新计算列表的大小,并再次存储在n中,这是一种开销。

如果使用ArrayList,您的问题本质上是重复的,因为i是最快的方法。如果使用LinkedList,则riter是最快的方法。