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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args) {
                Set<String> s = new HashSet<>();
                s.add("aaa");
                s.add("world");
                s.add("bbb");
                Iterator<String> it = s.iterator();
                while(it.hasNext()) {      //在迭代遍历的同时增加元素
                        if("world".equals(it.next())) {
                                s.add("javaee");
                        }
                }
                System.out.println(s);
        }
上面程序是Set体系使用迭代器遍历元素,并在遍历过程中用s.add()方法增加元素,但是并没有像在List体系中那样,出现并发修改异常,请问大神解释一下!!!

2 个回复

倒序浏览
此类的 iterator 方法返回的迭代器是快速失败 的:在创建迭代器之后,如果对 set 进行修改,除非通过迭代器自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来在某个不确定时间发生任意不确定行为的风险。

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器在尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误做法:迭代器的快速失败行为应该仅用于检测。
回复 使用道具 举报
我的报异常了,是你的编译问题吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马