我读到增强的for循环比平常更有效率for loop here:
http://developer.android.com/guide/practices/performance.html#foreach 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 loop因为理解增强的稍微复杂for loop.
检查这个是否有一个有趣的问题:http://www.coderanch.com/t/258147/java-programmer-SCJP/certification/Enhanced-Loop-Vs-Loop http://www.coderanch.com/t/258147/java-programmer-SCJP/certification/Enhanced-Loop-Vs-Loop
任何人都可以解释一下这两种类型的 for 循环的内部实现,或者解释使用增强型的其他原因吗?for loop?
说增强的 for 循环更高效有点过于简单化了。它can是,但在许多情况下它几乎与老式循环完全相同。
首先要注意的是,对于集合,增强的 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
。然而,循环 2 和 3 只会在列表中进一步移动一个元素,因为使用了Iterator
。循环 2 和循环 3 也将具有几乎相同的性能,因为循环 3 几乎与您在循环 2 中编写代码时编译器将生成的结果完全相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)