性能:通过Java中的List进行迭代

syk*_*ker 29 java

在Java中迭代遍历列表是否更慢:

for (int i=0;i<list.size();i++) {
    .. list.get(i)
}
Run Code Online (Sandbox Code Playgroud)

而不是:

for (Object o: list) {
    ... o
}
Run Code Online (Sandbox Code Playgroud)

Pab*_*dez 58

我假设你出于纯粹的好奇心而不会引用Knuth(有人可能会这样).

我相信一旦你的代码被编译,它就没有什么区别.它之前确实有所不同(示例2更具可读性和简洁性),所以请选择2号而不关心其余部分.

只需2美分

编辑

请注意,list.size()每次循环运行时,您在代码片段1中的代码都会计算,这可能会使它比第2代慢

再来一次编辑

我必须仔细检查的东西,Joshua Bloch建议使用for each循环(参见Effective Java 46项).我认为这结束了各种讨论.谢谢Josh!:)

  • 如何复制粘贴过早优化的代码?这有多恶啊! (16认同)
  • 过早优化**不是**所有邪恶的根源,复制/粘贴**是**! (7认同)
  • 通过放松疗法,您可以防止过早优化. (3认同)

SLa*_*aks 7

普通列表的性能不应有任何明显差异.

对于链表,迭代器将大大加快,特别是对于大型列表.