读阿里巴巴手册记录1

阿里巴巴手册问题描述大概如下

List<String> list= new ArrayList(50);

list.add("1");
list.add("2");
for (String string : list) {
if("1".equals(string)){
list.remove(string);

}}

如果把1换成2会不会出错

读阿里巴巴手册记录1

结果显然不是的在把

读阿里巴巴手册记录1

读阿里巴巴手册记录1

抛出异常

原因

     每次在进行删除和新增时会进行一个modCount++的操作

ArrayList此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险。

读阿里巴巴手册记录1

读阿里巴巴手册记录1

读阿里巴巴手册记录1

至于为什么删除1为什么不报错也很简单因为在执行next方法之前先要执行hasNext

读阿里巴巴手册记录1

读阿里巴巴手册记录1

这个方法 在删除第一个元素后size就变成了1等于了cursor所以根本没有执行next方法,意思就是根本没有进行第二次循环,所以如果要对集合进行删除操作还是要使用

读阿里巴巴手册记录1读阿里巴巴手册记录1


迭代器的方式