用for循环或while循环迭代?

Jam*_*fer 40 java iterator for-loop

我经常看到如下代码:

Iterator i = list.iterator();
while(i.hasNext()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我写的是(当Java 1.5不可用或者每个都不能使用时):

for(Iterator i = list.iterator(); i.hasNext(); ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

因为

  • 它更短
  • 它保持i在较小的范围内
  • 它减少了混淆的可能性.(在i外面使用?i声明在哪里?)

我认为代码应该尽可能简单易懂,这样我才能制作复杂的代码来完成复杂的事情.你怎么看?哪个更好?

来自:http://jamesjava.blogspot.com/2006/04/iterating.html

Lou*_*nco 81

我更喜欢for循环,因为它还将迭代器的范围设置为for循环.

  • 我在这个问题上是 50/50,但你提出了范围论点。 (2认同)

Jon*_*jap 10

while,for和foreach结构有适当的用途:

  • while - 如果您正在迭代,请使用此选项,循环与否的决定因素仅基于条件.在这个循环结构中,保持索引只是次要问题; 一切都应该基于条件

  • for - 如果要循环,请使用此选项,主要关注的是数组/集合/列表的索引.如果您最有可能通过所有元素并以特定顺序(例如,通过排序列表向后),则使用for更有用.

  • foreach - 如果您只是需要通过您的收集而无论订单如何,请使用此选项.

显然上面有例外,但这是我在决定使用哪个时使用的一般规则.话虽如此,我倾向于foreach更频繁地使用.


小智 5

为什么不使用for-each构造?(我有一段时间没有使用过Java,但这在C#中存在,我很确定Java 1.5也有这个):

List<String> names = new ArrayList<String>();
names.add("a");
names.add("b");
names.add("c");

for (String name : names)
    System.out.println(name.charAt(0));
Run Code Online (Sandbox Code Playgroud)


Dim*_*ima 5

正如您所指出的,我认为范围是这里最大的问题。

在“while”示例中,迭代器是在循环外部声明的,因此在循环完成后它将继续存在。如果稍后再次使用同一个迭代器,这可能会导致问题。例如 您可能会忘记在另一个循环中使用它之前初始化它。

在“for”示例中,迭代器是在循环内部声明的,因此其范围仅限于循环。如果您尝试在循环之后使用它,您将收到编译器错误。