您的位置:

Java数组foreach循环详解

一、foreach循环概述

Java语言中,foreach循环是一种简化循环代码书写的语法。它自动遍历数组或容器中的元素,无需显式地去控制循环变量的变化。foreach循环的格式为:

for(元素类型 变量名 : 数组或容器名) {
    循环体语句
}

其中,元素类型即数组或容器中元素的类型,变量名为循环的临时变量,用于获取数组或容器中的元素。例如:

int[] nums = {1, 2, 3, 4, 5};
for(int num : nums) {
    System.out.println(num);
}

以上代码将输出数组nums中的所有元素。

二、foreach循环数组遍历

使用foreach循环遍历数组时,可以遍历整个数组,也可以遍历数组的部分元素。

1. 遍历整个数组

遍历整个数组时,只需在foreach语句中指定数组名即可:

String[] names = {"Alice", "Bob", "Cathy"};
for(String name : names) {
    System.out.println(name);
}

以上代码将输出数组names中的所有元素。

2. 遍历部分元素

遍历部分元素时,需使用数组名和索引来限定遍历的范围。例如,以下代码输出数组nums中索引为1~3的元素:

int[] nums = {1, 2, 3, 4, 5};
for(int i=1; i<4; i++) {
    System.out.println(nums[i]);
}

等价于使用foreach循环:

int[] nums = {1, 2, 3, 4, 5};
for(int num : Arrays.copyOfRange(nums, 1, 4)) {
    System.out.println(num);
}

Arrays.copyOfRange()方法用于返回一个包含指定数组区间的新数组。在以上代码中,Arrays.copyOfRange(nums, 1, 4)返回的新数组包含了nums数组中索引为1~3的元素。

三、foreach循环容器遍历

除了数组,foreach循环还能够遍历Java中的容器类,例如List和Set。遍历容器的过程与遍历数组类似。

1. 遍历List容器

List是Java中常用的容器类。遍历List的方式为:

List list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cat");
for(String item : list) {
    System.out.println(item);
}

  

以上代码将输出List容器中的所有元素。

2. 遍历Set容器

Set是Java中的另一种常用容器类,它不允许有重复元素。遍历Set的方式为:

Set set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cat");
for(String item : set) {
    System.out.println(item);
}

  

以上代码将输出Set容器中的所有元素。

四、foreach循环和传统循环的比较

使用foreach循环遍历数组或容器的代码相较于传统的for循环更加简洁明了,避免了手动控制循环变量和循环边界的繁琐细节。但是,在某些情况下,foreach循环并不适合使用。例如,需要遍历数组并对每个元素进行操作时,传统的for循环更加灵活、好用。

1. 使用foreach循环修改数组元素的值

foreach循环一般用于遍历数组或容器,不太适合进行修改操作。以下代码在使用foreach循环修改数组nums中元素的值时会造成编译错误:

int[] nums = {1, 2, 3, 4, 5};
for(int num : nums) {
    num *= 2;  // 错误:num是一个循环变量,无法修改
    System.out.println(num);
}

可以使用传统的for循环进行遍历:

int[] nums = {1, 2, 3, 4, 5};
for(int i=0; i<nums.length; i++) {
    nums[i] *= 2;  // 正确:使用数组索引遍历并修改数组元素的值
    System.out.println(nums[i]);
}

2. 使用传统循环遍历不规则数组

不规则数组是指行、列不同的二维数组。对于不规则数组,由于每行元素个数不同,因此无法使用foreach循环进行遍历。例如,以下代码使用foreach循环遍历二维数组时会造成编译错误:

int[][] nums = {{1,2,3}, {4,5}, {6,7,8,9}};
for(int[] row : nums) {
    for(int num : row) {
        System.out.println(num);  // 错误:nums是一个不规则数组
    }
}

可以使用传统的for循环遍历不规则数组:

int[][] nums = {{1,2,3}, {4,5}, {6,7,8,9}};
for(int i=0; i<nums.length; i++) {
    for(int j=0; j<nums[i].length; j++) {
        System.out.println(nums[i][j]);  // 正确:使用两个索引变量遍历二维数组
    }
}

五、代码示例

public class ForeachLoopDemo {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        // 遍历整个数组
        for(int num : nums) {
            System.out.println(num);
        }
        // 遍历部分元素
        for(int num : Arrays.copyOfRange(nums, 1, 4)) {
            System.out.println(num);
        }
        String[] names = {"Alice", "Bob", "Cathy"};
        // 遍历数组
        for(String name : names) {
            System.out.println(name);
        }
        List list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cat");
        // 遍历List容器
        for(String item : list) {
            System.out.println(item);
        }
        Set
    set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Cat");
        // 遍历Set容器
        for(String item : set) {
            System.out.println(item);
        }
        int[][] nums2D = {{1,2,3}, {4,5}, {6,7,8,9}};
        // 遍历二维数组
        for(int i=0; i<nums2D.length; i++) {
            for(int j=0; j<nums2D[i].length; j++) {
                System.out.println(nums2D[i][j]);
            }
        }
    }
}