一、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的方式为:
Listlist = 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的方式为:
Setset = 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); } Listlist = 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]); } } } }