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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LsEmpire 中级黑马   /  2017-2-25 16:20  /  1248 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

List list = new ArrayList();
                list.add("a");
                list.add("a");
                list.add("world");
                list.add("a");
                ListIterator lit = list.listIterator();
                while(lit.hasNext()) {
                        String str = (String)lit.next();
                        if("world".equals(str)) {
                                lit.add("javaee");
                        }
                }
                System.out.println(list);
这段代码,是增加不会出现并发修改异常


ArrayList<String> list = new ArrayList<>();
                list.add("a");
                list.add("a");
                list.add("b");
                list.add("b");

                ListIterator<String> lit = list.listIterator();
                ListIterator<String> lit1 = list.listIterator();
                while(lit.hasNext()) {
                        String s = lit.next();
                        boolean b = true;
                        while(lit1.hasNext()) {
                                String s1 = lit1.next();
                                if(b && s.equals(s1)){
                                        b = false;
                                        continue;
                                }
                                if(s.equals(s1) && !b) {
                                        lit1.remove();
                                }
                        }
                }
                System.out.println(list);
这段我想删除重复,用的也是ListIterator为何会报错,并发修改异常!
谢谢指导!~~

7 个回复

倒序浏览
        ArrayList<String> list = new ArrayList<>();
                list.add("a");
                list.add("a");
                list.add("b");
                list.add("b");
                for (String str : list) {
                        ListIterator<String> lit = list.listIterator();
                        boolean first = true;
                        while(lit.hasNext()) {
                                if(first && str.equals(lit.next())) {
                                        first = false;
                                        continue;
                                }
                                if(str.equals(lit.next()) && !first) {
                                        lit.remove();
                                }
                }
                System.out.println(list);
这样也是并发修改异常。
求解为何异常?
回复 使用道具 举报
先顶一下!!!!!!!!
回复 使用道具 举报
没找出原因,还是再顶一下把
回复 使用道具 举报
迭代器嵌套吗?内部迭代器操作完后,会改变集合,但是外部的迭代器还在遍历。所以会有并发修改异常
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
2楼增强for循环底层是用迭代器实现的,所以跟一楼类似,出现并发修改异常
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
Port 金牌黑马 2017-2-26 02:31:21
7#
回复 使用道具 举报
yeluoxingye 发表于 2017-2-25 23:18
迭代器嵌套吗?内部迭代器操作完后,会改变集合,但是外部的迭代器还在遍历。所以会有并发修改异常
...

就是说,内层的迭代器每次都在创建,会知道有没有变化。但是while外面的就创建一次,不知道里面的变化?但是第一段代码,也是在while外面创建的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马