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

标签 java for-loop foreach

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

相关文章:

java - 在 "return"中遇到 "if"时方法不返回值

java - eclipse RCP :how to pass selection into handler

java - 运行此代码后 vlcj 出错

java - 编写一个程序,测试二维数组中是否有两个 1 位于同一行或同一列

class - Delphi 类 TList

java - 从同一包中的类通过访问静态方法。主要的()

javascript - 在 DOM 中之前将 jQuery on 'click' 函数分配给 ajax 生成的列表元素

coldfusion - Coldfusion for 循环中是否可以有两个索引?

r - 根据函数的参数进行函数调用 %do% 与 %dopar% (foreach)

PHP 数组 - 一个 'set where key=?' 类型的函数?