考虑:

List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
    System.out.println(item);
}

如果不使用for each语法,等价的for循环会是什么样子?


当前回答

它消除了所有基本的循环混乱,为代码增添了美感。它为您的代码提供了一个干净的外观,如下所示。

循环正常:

void cancelAll(Collection<TimerTask> list) {
    for (Iterator<TimerTask> i = list.iterator(); i.hasNext();)
         i.next().cancel();
}

用于每个:

void cancelAll(Collection<TimerTask> list) {
    for (TimerTask t : list)
        t.cancel();
}

for each是实现Iterator的集合上的构造。记住,您的集合应该实现Iterator;否则,不能将其用于每个。

以下行读作“for each TimerTask t in list”

for (TimerTask t : list)

每种情况下出现错误的可能性较小。您不必担心初始化迭代器或初始化循环计数器并终止它(在存在错误的地方)。

其他回答

它消除了所有基本的循环混乱,为代码增添了美感。它为您的代码提供了一个干净的外观,如下所示。

循环正常:

void cancelAll(Collection<TimerTask> list) {
    for (Iterator<TimerTask> i = list.iterator(); i.hasNext();)
         i.next().cancel();
}

用于每个:

void cancelAll(Collection<TimerTask> list) {
    for (TimerTask t : list)
        t.cancel();
}

for each是实现Iterator的集合上的构造。记住,您的集合应该实现Iterator;否则,不能将其用于每个。

以下行读作“for each TimerTask t in list”

for (TimerTask t : list)

每种情况下出现错误的可能性较小。您不必担心初始化迭代器或初始化循环计数器并终止它(在存在错误的地方)。

代码应为:

import java.util.ArrayList;
import java.util.List;

public class ForLoopDemo {

  public static void main(String[] args) {

    List<String> someList = new ArrayList<String>();

    someList.add("monkey");
    someList.add("donkey");
    someList.add("skeleton key");

    // Iteration using For Each loop
    System.out.println("Iteration using a For Each loop:");
    for (String item : someList) {
      System.out.println(item);
    }

    // Iteration using a normal For loop
    System.out.println("\nIteration using normal For loop: ");
    for (int index = 0; index < someList.size(); index++) {
      System.out.println(someList.get(index));
    }
  }
}

我认为这会奏效:

for (Iterator<String> i = someList.iterator(); i.hasNext(); ) {
   String x = i.next();
   System.out.println(x);
}

它看起来像这样。非常粗糙。

for (Iterator<String> i = someList.iterator(); i.hasNext(); )
        System.out.println(i.next());

Sun文档中对每一项都有很好的描述。

nsayer的答案暗示了这一点,但值得注意的是,当“someList”是实现java.lang.Iterable的任何东西时,OP的for(..)语法都会起作用——它不必是列表,也不必是java.util的集合。因此,甚至您自己的类型也可以与此语法一起使用。