我读到增强的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循环的其他原因吗?
最佳答案
说增强的 for 循环效率更高,有点过于简单化了。 可以,但在许多情况下,它几乎与老式循环完全相同。
首先要注意的是,对于集合,增强的 for 循环使用 Iterator
,因此,如果您使用 Iterator
手动迭代集合,那么您应该有漂亮的性能与增强的 for 循环几乎相同。
增强的for循环比简单实现传统循环更快的地方是这样的:
LinkedList<Object> list = ...;
// Loop 1:
int size = list.size();
for (int i = 0; i<size; i++) {
Object o = list.get(i);
/// do stuff
}
// Loop 2:
for (Object o : list) {
// do stuff
}
// Loop 3:
Iterator<Object> it = list.iterator();
while (it.hasNext()) {
Object o = it.next();
// do stuff
}
在这种情况下,循环 1 将比循环 2 和循环 3 慢,因为它必须(部分)在每次迭代中遍历列表以找到位置 i
处的元素。然而,由于使用了 Iterator
,循环 2 和 3 只会在列表中再向前移动一个元素。循环 2 和 3 也将具有几乎相同的性能,因为循环 3 几乎正是您在循环 2 中编写代码时编译器将产生的结果。
关于java - 为什么增强的for循环比普通的for循环更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11555418/