黑马程序员技术交流社区

标题: 迭代集合时操作元素的问题 [打印本页]

作者: lizhangzhi    时间: 2013-10-1 03:44
标题: 迭代集合时操作元素的问题
  1. ArrayList al=new ArrayList();
  2.            al.add("aaa");
  3.            al.add("bbb");
  4.            al.add("ccc");
  5.            Iterator i=al.iterator();
  6.            while(i.hasNext()){
  7.                    String s=(String) i.next();
  8.                    if("bbb".equals(s)){
  9.                            al.add("aaa");
  10.                    }
  11.                   
  12.            }
  13.            System.out.println(al);
复制代码

作者: lizhangzhi    时间: 2013-10-1 03:52
怎么文字没上去。。。。补充一下:当迭代器迭代集合元素时,判断条件,如果条件成立,向集合中添加元素  al.add("aaa");会引发异常,但如果是删除集合中的元素al.remove("aaa");不会抛出异常,为什么?视频上讲添加元素时由于并发操作引发的异常,难道删除元素的操作不属于并发操作?不理解???????
作者: 梦航    时间: 2013-10-1 08:16
朋友你好,
    Iterator仅用于遍历集合,本身没有盛装对象的能力。也就是说,在迭代的时候,仅仅是把集合的值传给了迭代变量,而并不是集合元素本身。
    当迭代访问集合元素时,集合元素本身并没有发生改变,也只能通过Iterator的remove方法来删除next方法返回的集合元素,否则将会发生异常。如你所述,将会产生如下异常:java.util.concurrentModificationException

祝编程愉快!
作者: 周志龙    时间: 2013-10-1 08:29
  1. while(i.hasNext()){
  2.                    String s=(String) i.next();
  3.                    if("bbb".equals(s)){
  4.                            al.add("aaa");//啥意思?里面已经有了一个一模一样的还需要再添么?当然会发生异常了
  5.                    }
  6. al.remove("aaa")是因为删除了里面存在着的的"aaa",这样是符合正常程序的
  7.                   
  8.            }
复制代码

作者: 睡不够的猪    时间: 2013-10-1 09:27
我怎么感觉你程序中的if判断条件是不是有问题啊,"bbb"equals(s) 返回的是int类型的数据 都不是boolean型的。。。
作者: 睡不够的猪    时间: 2013-10-1 10:20
对不起 我错了。。。{:soso_e127:}
作者: 睡不够的猪    时间: 2013-10-1 10:25
要实现add操作  可以使用ListIterator来完成  而Iterator能操作的方法只有三个:hasNext() next() 和remove()。。。




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