【发布时间】:2015-01-25 10:10:02
【问题描述】:
这两种for循环语法有什么区别,分别在什么时候使用:
for (String word : words) {
}
for (int i = 0; i < words.size(); i++) {
}
word 是一个字符串变量,words 是一个数组。
【问题讨论】:
标签: java string for-loop syntax
这两种for循环语法有什么区别,分别在什么时候使用:
for (String word : words) {
}
for (int i = 0; i < words.size(); i++) {
}
word 是一个字符串变量,words 是一个数组。
【问题讨论】:
标签: java string for-loop syntax
如果你需要索引变量“i”使用普通的for循环,否则使用foreach循环,即
for (String word : words).
【讨论】:
前者被称为“增强型”循环,适用于数组以及任何实现 java.lang.Iterable 接口的类。所以不仅仅是收藏。 :^)
后者通常在您需要知道迭代次数时使用。
【讨论】:
实际上有一个区别:你没有当前元素的索引。
技术上存在更大的差异。 foreach 循环仅适用于 Iterable 对象。例如,在 Java 中,所有集合(List、Vector、Map、Set)和数组都是可迭代的。这些基本上是implement Iterable 的类。这个 for-each 循环:
for (String word : words)
{
}
被编译成这样的:
for (Iterator<String> it = words.iterator(); it.hasNext(); )
{
String word = it.next();
}
Iterable 接口需要Iterator<T> iterator() 方法。
另一个区别是,使用 for-each 方法时,底层迭代器会阻止您修改正在迭代的集合。为什么?因为,如果您在 foreach 循环中插入或删除一个元素,会发生什么?这是没有意义的,因此是被禁止的。如果您尝试这样做,您将收到ConcurrentModificationException。您可以使用经典循环来执行此操作,但在执行此操作时应小心。
【讨论】:
您编写的第一个是 foreach 循环。它是一个特殊的 for 循环,您可以方便地循环遍历数组或集合中的所有实例。这样你就不需要另一个变量来保存索引,但要使用它,你必须有一个数组或元素集合。
第二个是基本的for循环,它为您提供了更多选择 - 您不仅可以使用它来循环遍历集合,还可以用于多次重复一个过程。所以你不需要数组或集合。
您在示例中使用这些循环的方式,除了第一个示例更易于阅读之外没有其他区别。
【讨论】:
for-each 循环通过完全隐藏迭代器或索引变量来消除混乱和出错的机会。
for (String word : words) {
}
上面的循环读作“for each word word in words。”
使用传统的for-each 循环没有性能损失。
【讨论】:
可能取决于语言,但我认为没有区别。
第一个示例的语法更简单,但没有计数器,因此您可能还应该声明另一个变量。在第二种情况下,您已经拥有它了..
【讨论】:
您编写的两个循环并不完全等效。这两个更接近:
for (String word : words) {
}
for (int i = 0; i < words.size(); i++) {
String word = words[i];
}
注意 String 变量的声明和赋值。
第一个循环,称为 foreach 循环,声明、分配和迭代,完全相同的语法可用于迭代集合(即 Iterable 对象)。
唯一的缺点是您无法访问索引。如果您不需要它,请使用 foreach。
【讨论】:
我不知道您使用的是哪种语言,但我假设 Java 所以第一个循环被称为一个 for each loop 我通常在有迭代甚至列表时使用它
List<String> myList = new ArrayList<String>();
但是这里的答案写得更好
这个循环可以很好地用于数组和其他的迭代 这样的收藏。尽管您可以在迭代中使用“for”循环 运算符,代码在使用 for-each 循环时变得更具可读性 处理庞大的数字。此循环优于“for”循环, 并非总是如此,但当出现以下情况时:
- 分配元素:当您需要为元素分配值时,避免使用 for-each 循环。只有访问时可以使用此循环 是需要的。
- 与单一结构一起使用:当您需要在某种情况下比较两个数组时,不能使用循环。
- 仅前向迭代:仅将“for-each”循环用于前向循环,并且在单步中也是如此。
- 兼容性:如果您需要您的代码与 Java 5 之前的版本兼容,您可能需要使用常规的 for 循环。
对于'for循环',它可以在特定任务需要重复次数时使用
例如,如果 words.size() 为 10,则循环将重复 9 次(因为没有相等的只有
for (int i = 0; i < words.size(); i++) {
System.out.println("My output");
}
来源:https://www.udemy.com/blog/for-each-loop-java/ 这是之前问过的类似问题 When to use the for loop over the while loop?
【讨论】:
第一个表示法为集合的每个元素创建一个指定类的对象。 第二种表示法对原始数组很有用。 但是,Java 8 引入了一种新的符号来遍历集合。
myIterable.forEach(element -> doSomething...);
【讨论】: