黑马程序员技术交流社区
标题:
迭代集合时操作元素的问题
[打印本页]
作者:
lizhangzhi
时间:
2013-10-1 03:44
标题:
迭代集合时操作元素的问题
ArrayList al=new ArrayList();
al.add("aaa");
al.add("bbb");
al.add("ccc");
Iterator i=al.iterator();
while(i.hasNext()){
String s=(String) i.next();
if("bbb".equals(s)){
al.add("aaa");
}
}
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
while(i.hasNext()){
String s=(String) i.next();
if("bbb".equals(s)){
al.add("aaa");//啥意思?里面已经有了一个一模一样的还需要再添么?当然会发生异常了
}
al.remove("aaa")是因为删除了里面存在着的的"aaa",这样是符合正常程序的
}
复制代码
作者:
睡不够的猪
时间:
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