黑马程序员技术交流社区
标题:
增强for循环中为什么不能对集合进行增删操作?
[打印本页]
作者:
寇弘禄
时间:
2013-3-4 19:31
标题:
增强for循环中为什么不能对集合进行增删操作?
本帖最后由 寇弘禄 于 2013-3-12 10:10 编辑
List<Object> list = new LinkedList<Object>();
list.add(5);
list.add("aa");
list.add(2.56);
list.add(6);
list.add(9);
for(Object inte : list){ //这里报个ConcurrentModificationException异常。
if(inte.equals("aa"))
list.remove(0);
System.out.println(inte);
}
System.out.println(list);
for(int i=0;i<list.size();i++){
if(list.get(i).equals("aa"))
list.remove("aa");
System.out.println(list.get(i));
}
System.out.println(list);
复制代码
作者:
莫嘉伟
时间:
2013-3-4 19:51
增强的Foreach循环和Iterator一样,在遍历集合的时候都不能修改集合,否则都会引发ConcurrentModificationException
作者:
侯丛政
时间:
2013-3-4 20:20
for(Object inte :
list
){
if(inte.equals("aa"))
list.remove(0);
System.out.println(inte);
}
增强for中的这个list是被操作的对象,遍历时,当他获得一个元素的时候,指针已经指向下一个元素,跟Iterator的原理是一样的,
当你准备开始遍历的时候,其实取得元素顺序就已经是确定的了,如果获得到一半时你增删被遍历的对象势必会打乱
原有的顺序,这是不允许的. 但是修改的操作还是可以的
作者:
黑马李超
时间:
2013-3-4 20:39
高级for循环在对集合进行遍历时,只能获取集合中的元素,不能对集合进行操作的。
如果需要删除对象可以选择Iterator中的自有方法remove()来进行删除。
或者你可以先将要删除的元素用另一个list装起来,等遍历结束再remove掉
可以这样写
List delList = new ArrayList();//用来装需要删除的元素
for(Object inte : list)
if(inte.equals("aa")){
n++;
delList.add(inte);
}
list.removeAll(delList);//遍历完成后执行删除
作者:
Benwolf0818
时间:
2013-3-4 21:01
增强for循环对集合进行遍历,只能获取元素,但是不能对集合进行操作
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果使用ListIterator,还可以再遍历过程中对集合进行增删改查的动作
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2