【发布时间】:2012-07-18 07:37:20
【问题描述】:
我在这里读到增强的for循环比普通的for循环效率更高:
http://developer.android.com/guide/practices/performance.html#foreach
当我搜索它们的效率差异时,我发现的是:在正常的for循环的情况下,我们需要一个额外的步骤来找出数组的长度或大小等,
for(Integer i : list){
....
}
int n = list.size();
for(int i=0; i < n; ++i){
....
}
但这是唯一的原因吗,增强的 for 循环比普通的 for 循环好?在这种情况下,最好使用普通的 for 循环,因为理解增强的 for 循环会稍微复杂一些。
检查这个有趣的问题:http://www.coderanch.com/t/258147/java-programmer-SCJP/certification/Enhanced-Loop-Vs-Loop
谁能解释一下这两种for循环的内部实现,或者解释一下使用增强的for循环的其他原因吗?
【问题讨论】:
-
如果你在某处“读到过一些东西”,最好尽可能引用它。
-
我在这里读到...但没有任何解释为什么会这样:developer.android.com/guide/practices/performance.html#foreach
-
“总结一下:默认使用增强的 for 循环,但考虑使用手写计数循环来进行性能关键的 ArrayList 迭代。”这与您阅读的内容相反:对于 ArrayList,第二种选择更快。
-
@Archie.bpgc:实际上,is 有一个解释:“
zero()最慢,因为 JIT 还无法优化获取数组长度的成本每次循环迭代一次。”。这对我来说似乎是一种解释。 -
留下 zero()...这是最糟糕的循环方式...但是 one() 呢?我的问题是 one() 和 two() 在遍历数组时没有区别(在 java 的情况下)......但在 android 中我更好地使用 two() 甚至数组??