gpt4 book ai didi

java - 为什么增强的for循环比普通的for循环更有效

转载 作者:IT老高 更新时间:2023-10-28 21:21:00 27 4
gpt4 key购买 nike

我读到增强的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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com