A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lizhangzhi 中级黑马   /  2013-10-1 03:44  /  1239 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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);
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

6 个回复

倒序浏览
怎么文字没上去。。。。补充一下:当迭代器迭代集合元素时,判断条件,如果条件成立,向集合中添加元素  al.add("aaa");会引发异常,但如果是删除集合中的元素al.remove("aaa");不会抛出异常,为什么?视频上讲添加元素时由于并发操作引发的异常,难道删除元素的操作不属于并发操作?不理解???????

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
朋友你好,
    Iterator仅用于遍历集合,本身没有盛装对象的能力。也就是说,在迭代的时候,仅仅是把集合的值传给了迭代变量,而并不是集合元素本身。
    当迭代访问集合元素时,集合元素本身并没有发生改变,也只能通过Iterator的remove方法来删除next方法返回的集合元素,否则将会发生异常。如你所述,将会产生如下异常:java.util.concurrentModificationException

祝编程愉快!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
  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.            }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
我怎么感觉你程序中的if判断条件是不是有问题啊,"bbb"equals(s) 返回的是int类型的数据 都不是boolean型的。。。
回复 使用道具 举报
对不起 我错了。。。{:soso_e127:}
回复 使用道具 举报
要实现add操作  可以使用ListIterator来完成  而Iterator能操作的方法只有三个:hasNext() next() 和remove()。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马