1.用法
在Java中,foreach循环也被称为增强型for循环。它可以用来遍历数组、集合或其他类似结构的数据。foreach循环的语法如下:
for (element_type element : collection) {
// 循环体
}
其中,element_type是集合中元素的类型,element是集合中每个元素的变量名,collection是需要遍历的集合。在循环体中,可以使用element变量来访问当前元素的值。
下面是一个示例,展示了如何使用foreach循环来遍历一个整型数组:
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
在这个示例中,我们定义了一个整型数组numbers,然后使用foreach循环来遍历这个数组,并在循环体中打印出每个元素的值。输出结果如下:
除了数组,foreach循环还可以用于遍历其他类型的集合,例如List、Set、Map等。不过需要注意的是,对于Map类型的集合,foreach循环只能遍历其中的键或值,而不能同时访问键和值。
2.案例
因为我们现在还没学习数组和集合相关的内容,所以壹哥在这里暂时给大家设计一个简单的案例,大家先参照着练习。
public class Demo07 {
public static void main(String[] args) {
// foreach循环
//定义一个整形数组
int[] numbers = { 100, 200, 300, 400, 500 };
for (int x : numbers) {
System.out.print(x+",");
}
System.out.print("\n");
//定义一个字符串数组
String[] names = { "一一哥", "壹壹哥", "千锋教育", "千锋java" };
for (String name : names) {
System.out.print(name+",");
}
}
}
3.缺陷
在很多时候,foreach都可以替代for循环,但并不是所有的时候都能替代for,这是因为foreach循环存在着一些缺陷。
虽然foreach是for循环的增强版,简化了编程,提高了代码的可读性和安全性,避免了数组越界。而foreach一般是结合泛型使用,在需要使用数组或者集合索引时,foreach就不好用了。
当然有很多朋友会问:为什么java不要在foreach循环里进行元素的remove/add操作?
在Java中,使用foreach循环迭代集合时,我们不能在循环体中使用remove和add操作来修改集合,否则会抛出ConcurrentModificationException异常。
这是因为foreach循环底层使用的是迭代器(Iterator)来遍历集合。当我们通过调用集合的remove或add方法删除或添加元素时,会修改集合的结构,导致迭代器的状态不一致,从而引发异常。
解决这个问题的方法是使用Iterator的remove方法来删除元素。例如:
List list = new ArrayList<>();
Iterator it = list.iterator();
while (it.hasNext()) {
String str = it.next();
if (str.equals("foo")) {
it.remove();
}
}
在这个例子中,我们使用了Iterator的remove方法来删除元素,而不是在foreach循环中直接调用List的remove方法。这样可以避免ConcurrentModificationException异常的发生。
总之,如果需要在循环中添加或删除元素,应该使用迭代器的方法,而不是直接调用集合的方法。