首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

为什么foreach中不允许对元素进行add和remove

Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification...(ArrayList.java:911) at java.util.ArrayList$Itr.next(ArrayList.java:861) 这时候就有人说,你为啥不直接用 iterator 迭代器遍历呢...Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification...(ArrayList.java:911) at java.util.ArrayList$Itr.next(ArrayList.java:861) 都出现了相同异常 ConcurrentModificationException...,实际很简单,复制 也就是他创建一个新数组,再将旧数组复制到新数组,但是为什么很少有人推荐这种做法,根本原因还是 复制 因为你使用了复制,那么就一定会出现有两个存储相同内容空间,这样消耗了空间

43810

Java中List迭代过程中删除、新增元素处理

参考链接: Java 8中迭代带有索引流Stream 异常信息:  java.util.ConcurrentModificationException  at java.util.ArrayList$...Itr.checkForComodification(ArrayList.java:859) at java.util.ArrayList$Itr.next(ArrayList.java:831) at...:192)  代码:  @Test     public void testIterator (){         //测试ArrayList迭代过程中删除元素,         //避免抛出 java.util.ConcurrentModificationException...,如果在多线程应用程序中出现同时访问,而且出现修改操作时候都要求外部操作同步化;调用Iterator操作获得Iterator对象在多线程修改Set时候也自动失效,并抛出java.util.ConcurrentModificationException...Iterator被创建时候,建立了一个内存索引表(单链表),这 个索引表指向原来对象,当原来对象数量改变时候,这个索引表内容没有同步改变,所以当索引指针往下移动时候,便找不到要迭代对象,于是产生错误

1K00

快速失败Vs安全失败(Java迭代器附示例)

will throw ConcurrentModificationException } } } Output : Exception in thread "main" java.util.ConcurrentModificationException...at java.util.ArrayList$Itr.checkForComodification(Unknown Source) at java.util.ArrayList$Itr.next...,所以任何对原集合对象结构性修改都会被迭代器忽略,但是这类迭代器有一些缺点,其一是它不能保证你迭代时获取是最新数据,因为迭代器创建之后对集合任何修改都不会在该迭代器中更新,还有一个缺点就是创建克隆对象在时间和内存都会增加一些负担...,就是有一个地方和javadoc有出入,即“大多数集合类返回快速失败迭代器在遍历时不允许结构性修改(结构性修改指添加,删除和更新集合中一个元素)”这一句,而javadoc中对此解释是“结构修改是指任何添加或删除一个或多个元素操作...,或者显式调整底层数组大小;仅仅设置元素值不是结构修改。”

1.2K70

JAVA 集合list,Map删除元素方法总结

} System.out.println("list=" + list.toString()); } 输出结果: Exception in thread "main" 1 2 java.util.ConcurrentModificationException...at java.util.ArrayList$Itr.checkForComodification(Unknown Source) at java.util.ArrayList$Itr.next(...如果单线程发出违反对象协定方法调用序列,则该对象可能抛出此异常。例如,如果线程使用快速失败迭代器在 collection 迭代时直接修改该 collection,则迭代器将抛出此异常。...Java中For each实际使用是iterator进行处理。而iterator是不允许集合在iterator使用期间删除。...如果进行迭代时用调用此方法之外其他方式修改了该迭代器所指向集合,则迭代器行为是不明确

2.7K50
领券