读阿里巴巴手册记录

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

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会不会出错

 

结果显然不是的在把

 

抛出异常

原因

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

 

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

 

快速失败

 

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

 

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

 

迭代器的方式

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值