黑马程序员技术交流社区

标题: 【已解决】关于迭代器的问题对 疑问 [打印本页]

作者: 贾成龙    时间: 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