-------
android培训
、
java培训
、期待与您交流! ----------
foreach循环:
集合中的元素虽然可以用Iterator进行遍历,但是写法上比较繁琐,为了简化书写,从JDK5.0开始,提供了foreach循环.foreach循环是一种更加简洁的for循环,也称为增强for.foreach循环用于遍历集合或数组中的元素,格式是:
for (容器中元素类型 临时变量 : 容器变量) {
执行语句
}
从上面的格式可以看出,与for循环相比,foreach循环不需要获得集合或数组的长度,也不需要根据索引访问容器中的元素,但它会自动遍历容器中的每个元素,例如:
package com.itheima;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
//创建ArrayList对象
ArrayList al = new ArrayList();
//向ArrayList中添加字符串元素
al.add("hello");
al.add("java");
al.add("heima");
//使用for循环遍历该集合
for (Object obj : al) {
//输出打印集合中的元素
System.out.println(obj);
}
}
}
其运行结果为:

通过这个例子可以看出,foreach循环在遍历集合是语法非常简洁,没有循环条件,也没有迭代语句,所有这些工作都交给虚拟机去执行了.foreach循环的次数是有容器中元素的个数决定的,每次循环时,foreach中都通过变量间当前循环的元素记住,从而将集合中的元素打印出来.
注意:
1.foreach循环虽然书写比较简洁,但在使用上也有一定的局限性.当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改.例如:

运行结果为:

例子中分别使用foreach循环和普通for循环去修改数组中的元素.从运行结果可以看出foreach循环并不能修改数组中元素的值.其原因是第10行代码中的str="Android"只是将临时变量str指向了一个新的字符串,这和数组中的元素没有一点关系,而普通for循环中,是可以通过索引的方式来引用数组中的元素并将其进行修改的.
2.在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法去删除元素,会出现异常,例如:

这个代码在运行是会出现异常ConcurrentModificationException..这个异常是迭代器对象抛出的,出现异常的原因是集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不正确.
为了解决上述问题,可以使用迭代器本身的删除方法,将上述例子的第16行代码替换成it.remove()即可解决这个问题,其代码如下:

其运行结果如下:

从运行结果可以看出,字符串"hello"确实被删除了.并且没有出现异常现象.因此可以得出结论,调用迭代器对象的remove()方法删除元素所导致的迭代此时变化,对于迭代器本身来讲是可以预知的.
集合中的元素虽然可以用Iterator进行遍历,但是写法上比较繁琐,为了简化书写,从JDK5.0开始,提供了foreach循环.foreach循环是一种更加简洁的for循环,也称为增强for.foreach循环用于遍历集合或数组中的元素,格式是:
for (容器中元素类型 临时变量 : 容器变量) {
执行语句
}
从上面的格式可以看出,与for循环相比,foreach循环不需要获得集合或数组的长度,也不需要根据索引访问容器中的元素,但它会自动遍历容器中的每个元素,例如:
package com.itheima;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
//创建ArrayList对象
ArrayList al = new ArrayList();
//向ArrayList中添加字符串元素
al.add("hello");
al.add("java");
al.add("heima");
//使用for循环遍历该集合
for (Object obj : al) {
//输出打印集合中的元素
System.out.println(obj);
}
}
}
其运行结果为:
通过这个例子可以看出,foreach循环在遍历集合是语法非常简洁,没有循环条件,也没有迭代语句,所有这些工作都交给虚拟机去执行了.foreach循环的次数是有容器中元素的个数决定的,每次循环时,foreach中都通过变量间当前循环的元素记住,从而将集合中的元素打印出来.
注意:
1.foreach循环虽然书写比较简洁,但在使用上也有一定的局限性.当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改.例如:
运行结果为:
例子中分别使用foreach循环和普通for循环去修改数组中的元素.从运行结果可以看出foreach循环并不能修改数组中元素的值.其原因是第10行代码中的str="Android"只是将临时变量str指向了一个新的字符串,这和数组中的元素没有一点关系,而普通for循环中,是可以通过索引的方式来引用数组中的元素并将其进行修改的.
2.在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法去删除元素,会出现异常,例如:
这个代码在运行是会出现异常ConcurrentModificationException..这个异常是迭代器对象抛出的,出现异常的原因是集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不正确.
为了解决上述问题,可以使用迭代器本身的删除方法,将上述例子的第16行代码替换成it.remove()即可解决这个问题,其代码如下:
其运行结果如下:
从运行结果可以看出,字符串"hello"确实被删除了.并且没有出现异常现象.因此可以得出结论,调用迭代器对象的remove()方法删除元素所导致的迭代此时变化,对于迭代器本身来讲是可以预知的.