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声明在哪里?)我认为代码应该尽可能简单易懂,这样我才能制作复杂的代码来完成复杂的事情.你怎么看?哪个更好?
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)
正如您所指出的,我认为范围是这里最大的问题。
在“while”示例中,迭代器是在循环外部声明的,因此在循环完成后它将继续存在。如果稍后再次使用同一个迭代器,这可能会导致问题。例如 您可能会忘记在另一个循环中使用它之前初始化它。
在“for”示例中,迭代器是在循环内部声明的,因此其范围仅限于循环。如果您尝试在循环之后使用它,您将收到编译器错误。