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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾成龙 中级黑马   /  2012-8-27 00:43  /  1273 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贾成龙 于 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并发修改异常呢?

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

2 个回复

倒序浏览
因为在迭代的过程中,是按顺序查询数据的。如果删除的一条数据,则 ArrayList 中的数据发生了错位。
也就是说下一条查询的数据就很有可能就查不到了。
所以会报ConcurrentModificationException并发修改异常。
如果你想删除数据的话,可以在迭代的过程中,记录下要删除的数据,在迭代完成后,再去删除数据,就不会报异常了

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 包晗 于 2012-8-27 09:30 编辑

用ListIterator吧....
Iterator 迭代时进行并发增删可能造成 元素已经被删掉了,还在迭代
规定了Iterator只有3方法
所以java提供了 能增删的迭代ListIterator
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马