Java for-each循环(遍历循环)

在处理数组和集合时,我们可以使用增强形式的for循环。也称为for-each循环。这是因为循环会遍历数组或集合的每个元素。

for-each循环:

  • for-each循环也叫增强型的for循环,或者叫foreach循环。

  • for-each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。

  • for-each循环的加入简化了集合的遍历。

我们首先来看一下for-each循环的语法:

for(data_type item : collections) {
    ...
}
  • collection -您需要遍历的集合或数组。

  • item -集合中的单个项目。

for循环和for-each循环之间的区别

为什么在处理数组时优先使用for-each循环,而不是for循环,我们来看下面的示例。

在这里的示例显示了如何使用标准for循环遍历数组的元素。

class ForLoop {
    public static void main(String[] args) {
      
        char[] vowels = {'a', 'e', 'i', 'o', 'u'};

        for (int i = 0; i < vowels.length; ++ i) {
            System.out.println(vowels[i]);
        }
    }
}

输出:

ae
i
o
u

现在,我们将使用for-each循环执行相同的任务。

class AssignmentOperator {
   public static void main(String[] args) {
      
      char[] vowels = {'a', 'e', 'i', 'o', 'u'};
      // foreach 循环
      for (char item: vowels) {
         System.out.println(item);
      }
   }
}

输出:

ae
i
o
u

在这里,我们可以看到两个程序的输出是相同的。

当我们仔细分析这两个程序时,我们可以注意到for-each循环更易于编写,并使我们的代码更具可读性。这就是它被称为增强for循环的原因。

因此,建议尽可能在标准for循环上使用增强的for循环。

for-each循环是如何工作的?

对于每个迭代,执行for-each循环,这是for-each循环在Java中的工作方式。

  • 迭代 - 遍历给定集合或数组(collections)中的每个项目,

  • 存储 - 变量(item)中的每个项目

  • 并重复执行循环内的主体语句。

让我们通过一个实例清楚地说明一下。

示例:for-each循环

下面的程序计算整数数组的所有元素的总和。

class EnhancedForLoop {
    public static void main(String[] args) {
      
        int[] numbers = {3, 4, 5, -5, 0, 12};
        int sum = 0;
      
        for (int number: numbers) {
            sum += number;
        }
      
        System.out.println("Sum = " + sum);
    }
}

输出:

Sum = 19

在上面的程序中,for-each循环的执行如下:

迭代
1number = 3 时, sum = 0 + 3 = 3
2number = 4 时,sum = 3 + 4 = 7
3number = 5 时,sum = 7 + 5 = 12
4number = -5 时,sum = 12 + (-5) = 7
5number = 0 时,sum = 7 + 0 = 7
6number = 12 时,sum = 7 + 12 = 19

您可以在每次迭代中看到for-each循环

  • 遍历numbers数组中的每个元素

  • 将其存储在number变量中

  • 并执行主体,并将number加到变量sum中,最后得出总数(sum)

示例:先对比了两种for循环;之后实现了用增强for循环遍历二维数组;最后采用三种方式遍历了一个List集合。

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

public class ForeachTest
{
    public static void main(String[] args)
    {
        int[] arr = {1, 2, 3, 4, 5};
        
        System.out.println("----------旧方式遍历------------");
        //旧式方式        
        for(int i=0; i<arr.length; i++)
        {
            System.out.println(arr[i]);
        }
        
        System.out.println("---------新方式遍历-------------");
        
        //新式写法,增强的for循环
        for(int element:arr)
        {
            System.out.println(element);
        }
        
        System.out.println("---------遍历二维数组-------------");
        
        //遍历二维数组
        
        int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} ;
        
        for(int[] row : arr2)
        {
            for(int element : row)
            {
                System.out.println(element);
            }
        }
        
        //以三种方式遍历集合List
        
        List<String> list = new ArrayList<String>();
        
        list.add("a");
        list.add("b");
        list.add("c");
        
        System.out.println("----------方式1-----------");
        //第一种方式,普通for循环
        for(int i = 0; i < list.size(); i++)
        {
            System.out.println(list.get(i));
            
        }
        
        System.out.println("----------方式2-----------");
        //第二种方式,使用迭代器
        for(Iterator<String> iter = list.iterator(); iter.hasNext();)
        {
            System.out.println(iter.next());
        }
        System.out.println("----------方式3-----------");
        //第三种方式,使用增强型的for循环
        for(String str: list)
        {
            System.out.println(str);
            
        }
    }
}

For-Each循环的缺点:

丢掉了索引信息。

当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。

编程笔记 » Java for-each循环(遍历循环)