概述
一、概述
普通for循环在遍历集合时使用下标来定位集合中的元素。java在JDK1.5开始支持foreach循环,foreach在一定程度上简化了对集合的遍历。但某些情况下,foreach是不能完全代替for循环的。
限制场景:
1、foreach适用于数组或实现了iterator的集合类。foreach就是使用Iterator接口来实现对集合的遍历的。
2、在用foreach循环遍历一个集合时,不能改变集合中的元素,如增加元素、修改元素。否则会抛出ConcurrentModificationException异常。想了解原因的可以研究一下源码。
也不能修改集合中的元素(不报异常),但可以修改元素的属性。
二、验证之旅
(1)添加或移除元素
添加和移除是一样的,这里只给出了移除的代码。感兴趣的童鞋们可以自己试一试,毕竟纸上得来终觉浅嘛。
1、普通for循环进行添加或移除元素
由输出结果可知,普通for循环,成功移除了元素“jingjing”。
2、foreach循环添加或移除元素
由输出结果可知,foreach循环抛出ConcurrenModificationException异常。
(2)修改元素
1、普通for循环修改元素
由输出结果可知,普通for循环成功将list集合中的每一个元素修改成“nini”
2、foreach循环修改元素
由输出结果可知,通过foreach方式并不能修改list中的元素。
3、foreach循环修改元素的属性
首先声明一个学生类,代码如下:
package foreach;
public class Student {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
public Student(){};
public Student(int age,String name){
this.age=age;
this.name=name;
}
}
StudentTest类的测试代码如下:
Student student=new Student(1,"beibei");
Student student1=new Student(1,"jingjing");
List<Student> studentList=new ArrayList<Student>();
studentList.add(student);
studentList.add(student1);
System.out.println(student);
System.out.println(student1);
System.out.println(student.getName());
System.out.println(student1.getName());
for(Student stu:studentList)
{
stu.setName("huanhuan");
}
System.out.println(student);
System.out.println(student1);
System.out.println(student.getName());
System.out.println(student1.getName());
最后的测试结果如下:
由输出结果可知,student1和student2对象本身并没有改变,但他们的name属性发生了变化。
三、意外发现:
验证之路似乎很完美,一切都和自己的预想结果相符,不过却总有意外的惊喜。
1、list集合中的元素只有两条,使用foreach循环移除元素。
2、list集合中的元素大于2个,对foreach循环加上try--catch。
在这两种情况下,成功移除了元素。
最后
以上就是幸福红酒为你收集整理的【java】for和foreach的区别的全部内容,希望文章能够帮你解决【java】for和foreach的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复