黑马程序员技术交流社区

标题: 集合问题 [打印本页]

作者: 黑马-王泽斌    时间: 2012-8-10 22:18
标题: 集合问题
为什么在集合里不能用增强for循环进行数据的删除操作?
作者: 焦晨光    时间: 2012-8-10 22:25
增强for循环,只是用来进行简单的遍历数组和集合
它无法访问集合和数组中的内容更不可以删除或改变集合中的元素
增强for循环的优点是:使代码简洁易懂
缺点是有很大的局限性:无法访问和改变集合中的元素

如果想要访问和处理集合中的元素就必须要用Iterator接口里的方法来操作
可以用Iterator接口的remove()方法删除集合中的元素
作者: 来明坤    时间: 2012-8-10 22:27
遍历集合过程中,不能对集合本身进行操作的吧   印象里是这个原因
作者: 黑马-王泽斌    时间: 2012-8-10 22:39
问题已经解决
作者: 尤洋    时间: 2012-8-10 22:43
本帖最后由 尤洋 于 2012-8-10 22:47 编辑

原因很简单,增强for底层调用的是Iterator,
但是在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以为了安全性考虑 集合里不能用增强for循环进行数据的删除操作

如果必须要操作数据的话,可以使用迭代器自身的方法去操作,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。


作者: 周坤    时间: 2012-8-10 22:49
  1. public class ForDemo {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 List list=new ArrayList();
  7.                 list.add(1);
  8.                 list.add(2);
  9.                 list.add(3);
  10.                 System.out.println(list);
  11.                 for(Object obj:list){
  12.                         System.out.print(obj);
  13.                         //list.remove(0);//会出java.util.ConcurrentModificationException
  14.                         list.set(1, 8);
  15.                 }
  16.                 System.out.println(list);
  17.                
  18.                
  19.        
  20.         }

  21. }
复制代码
输出的结果是
[1, 2, 3]
183[1, 8, 3]

其中list还是可以改变的,
但是remove,add等方法,会改变list的结构,在迭代的时候,会发生并发异常。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2