For循环类型比较

时间:2014-11-26 22:31:54

标签: java string for-loop syntax

这两个for循环语法之间的区别是什么,以及每次使用的时间:

for (String word : words) {

}

for (int i = 0; i < words.size(); i++) {

}

word是一个字符串变量,words是一个数组。

9 个答案:

答案 0 :(得分:2)

如果你需要索引变量&#34;我&#34;使用normal for循环,否则使用foreach循环,即

for (String word : words).

答案 1 :(得分:2)

前者称为&#34;增强型&#34; for循环并适用于数组以及实现java.lang.Iterable接口的任何类。所以不只是收藏品。 :^)

后者通常在您需要知道迭代次数时使用。

答案 2 :(得分:2)

实际上存在差异:您没有当前元素的索引。

技术上存在较大的差异。 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。您可以使用经典循环执行此操作,但在执行此操作时应该小心。

答案 3 :(得分:1)

你写的第一个是 foreach循环。它是一个特殊的for循环,您可以方便地循环遍历数组或集合中的所有实例。这样你不需要另一个变量来保存索引,但要使用它,你必须有一个数组或元素集合。

第二个是基本的 for循环,它为您提供了更多选项 - 您不仅可以使用它来循环收集,还可以使用它多次重复一个过程。所以你不需要阵列或集合。

您在示例中使用这些循环的方式除了第一个示例更易于阅读之外没有任何区别。

答案 4 :(得分:1)

for-each循环通过完全隐藏迭代器或索引变量来消除混乱和错误的机会。

for (String word : words) {

}

上面的循环显示为“对于单词中的每个单词单词”。

使用传统的for-each循环没有性能损失。

答案 5 :(得分:0)

可能取决于语言,但我认为没有区别。

第一个示例的语法更容易但没有计数器,因此您可能还应该声明另一个变量。在第二种情况下,你已经拥有它..

答案 6 :(得分:0)

您编码的两个循环并不完全等效。这两个更接近:

for (String word : words) {

}

for (int i = 0; i < words.size(); i++) {
    String word = words[i];

}

注意String变量的声明并赋值给它。

第一个循环,称为 foreach 循环,声明,分配和迭代,并且可以使用完全相同的语法来迭代集合(即可迭代对象)。

唯一的缺点是您无法访问索引。如果您不需要它,请使用foreach。

答案 7 :(得分:0)

我不知道你正在使用哪种语言,但我认为Java因为第一个循环被称为每个循环,我通常在迭代甚至列表时使用它

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

但是这里有更好的答案

  

这个循环可以很好地用于迭代数组和其他   这样的集合。虽然你可以使用迭代的“for”循环   运算符,代码变得更易读,每个循环时   处理大量的数字。这个循环优于“for”循环,   并非总是如此,但是当出现以下情况时:

     
      
  • 分配元素:当需要为元素赋值时,避免使用for-each循环。仅在访问时可以使用此循环   是理想的。
  •   
  • 与单一结构一起使用:当您需要在某种情况下比较两个数组时,不能使用循环。
  •   
  • 仅限前向迭代:仅将“for-each”循环用于前向循环,并且也可以单步执行。
  •   
  • 兼容性:如果您需要将代码与Java 5之前的版本兼容,则可能需要进行常规for循环。
  •   

对于&#39; for循环&#39;它可以在特定任务需要重复次数时使用

例如,如果words.size()为10,则循环将重复9(因为没有等于&lt;)次

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?

答案 8 :(得分:0)

第一个表示法为集合的每个元素创建指定类的对象。 第二种表示法对于原始数组是有用的。 但是,Java 8引入了一种新的符号来迭代通过集合。

myIterable.forEach(element -> doSomething...);