黑马程序员技术交流社区
标题:
【已解决】关于迭代器的问题对 疑问
[打印本页]
作者:
贾成龙
时间:
2012-8-27 00:43
标题:
【已解决】关于迭代器的问题对 疑问
本帖最后由 贾成龙 于 2012-8-27 21:36 编辑
怎么在迭代器Iterator迭代时候删除元素
public class Test {
public static void main(String[] args) {
ArrayList array = new ArrayList();
array.add("aa");
array.add("bb");
array.add("cc");
System.out.println(array);
Iterator it = array.iterator();
while (it.hasNext()) {
String s = (String) it.next();
if ("aa".equals(s)) {
it.remove();
}
}
System.out.println(array);
}
}
为什么在迭代的过程中不能删除元素?删除会发生ConcurrentModificationException并发修改异常呢?
作者:
黑马_许芸
时间:
2012-8-27 08:57
因为在迭代的过程中,是按顺序查询数据的。如果删除的一条数据,则 ArrayList 中的数据发生了错位。
也就是说下一条查询的数据就很有可能就查不到了。
所以会报ConcurrentModificationException并发修改异常。
如果你想删除数据的话,可以在迭代的过程中,记录下要删除的数据,在迭代完成后,再去删除数据,就不会报异常了
作者:
包晗
时间:
2012-8-27 09:28
本帖最后由 包晗 于 2012-8-27 09:30 编辑
用ListIterator吧....
Iterator 迭代时进行并发增删可能造成 元素已经被删掉了,还在迭代
规定了Iterator只有3方法
所以java提供了 能增删的迭代ListIterator
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2