场景1:

对Map进行遍历的同时对其进行了新增操作.

原因:

非线性的数据结构在遍历过程中添加元素的需求不合理,所以 set 和 map 的迭代器没有 add 方法。

listIterator中的add方法是向next()方法对应的元素之前添加元素,也就是说,后续不会遍历到这些元素。这一点成立的前提是List的所有实现类都是有序的。而Set和Map大部分的实现类都是不保证有序的。

也就是说,不能保证新插入的元素在后续会被遍历或者不会被遍历到。如果边遍历边插入,容易引起死循环等问题。因此,Set和Map的迭代器实现类不具备提供add方法的条件。

解决方案:

引入一个临时的容器,将需要添加的元素先添加到临时容器中,等待遍历结束后再将临时容器中的元素addAll到Set或putAll到Map中。

场景2

对Map进行删除操作

原因

首先HashMap里面有个成员属性modCount,用于记录map被修改的次数(当map被put或者remove时++).
而当我们使用迭代器Iterator对map进行遍历的时候,在迭代器创建的时候就将modCount赋予给了迭代器里面expectedModCount。
map.remove()时只会修改modCount++,expectedModCount不变.
因此在下一次迭代器执行next()方法的时候 ,就会因为modeCount和expectedModCount这两个不一致而抛出错误。

解决

使用迭代器对数据进行删除.

        HashMap<Integer, Integer> map = new HashMap<>();map.put(1,1);map.put(2,1);map.put(3,1);map.put(4,1);Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<Integer, Integer> entry = iterator.next();if (entry.getKey() % 2 == 0) {iterator.remove();}}map.entrySet().stream().forEach(System.out::println);

解决java.util.ConcurrentModificationException:null相关推荐

  1. java.util.ConcurrentModificationException: null异常(已解决,原因出自于Java集合的快速失败机制)

    问题来源 今天我在写项目时,对集合中的元素做了以下操作 报错信息如图 问题来源: 在Java中对集合进行遍历时,一旦对集合进行增删操作,在遍历时会引起java.util.ConcurrentModif ...

  2. java.util.ConcurrentModificationException: null异常由for增强循环嵌套增删引起。

    问题: 在Java中对集合使用增强for循环时,一旦对集合进行增删操作,在遍历时会引起java.util.ConcurrentModificationException: null异常. 原因: 在官 ...

  3. java 循环删除hashmap中的键值对,解决java.util.ConcurrentModificationException报错

    示例 import java.util.HashMap; import java.util.Iterator; import java.util.Map;public class DeleteHash ...

  4. 出现 java.util.ConcurrentModificationException 时的解决办法

    for (int i=0; i<list.size(); i++) { // 只有在这种方式遍历集合时,同时对集合增加.删除才不会影响. // list.remove(list.get(i)); ...

  5. java.util.ConcurrentModificationException异常原因及解决方法

    java.util.ConcurrentModificationException异常原因及解决方法 参考文章: (1)java.util.ConcurrentModificationExceptio ...

  6. java.util.ConcurrentModificationException 解决办法

    在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除. 则使用会报以下异常: Java.util.ConcurrentModifi ...

  7. (转)Exception in thread main java.util.ConcurrentModificationException异常怎么解决?

    [转载原因:同样遇到set的foreach遍历中调用remove方法,导致这个错误.] [转载原文:https://blog.csdn.net/jdk_wangtaida/article/detail ...

  8. 非线程安全类ArrayList出现异常:java.util.ConcurrentModificationException

    今天执行了一段<图解多线程设计模式>中的代码,结果抛出了如下的异常: Exception in thread "ReaderThread" java.util.Conc ...

  9. List中subList方法抛出异常java.util.ConcurrentModificationException原理分析

    1.首先从测试代码开始: public class Test {public static void main(String[] args) {List<Integer> list = n ...

  10. 为什么会出现 java.util.ConcurrentModificationException 异常?

    http://www.iteye.com/topic/124788 在Map或者Collection的时候,不要用它们的API直接修改集合的内容(否则会出现 java.util.ConcurrentM ...

最新文章

  1. 嵌入式传感器是智能移动增长的关键
  2. python随机生成30个8_Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例...
  3. [每日一题] OCP1z0-047 :2013-08-14 如何理解USING INDEX?...................................41
  4. OpenStack Nova Placement API 统一资源管理接口的未来
  5. 输入n个字符串字典序排序_FSST - 快速字符串压缩算法
  6. 门户网站建设与运营需要付出更多成本
  7. Orangepi Zero播放声音报错的解决方案
  8. Linux系统监控shell脚本
  9. iOS8:把这些七招APP哭
  10. Matlab之abs、double与char函数
  11. python标准库之collections
  12. 千斤顶装配图怎么画_机械制图——绘制千斤顶装配图教程.ppt
  13. Apache Rewrite 详解 RewriteBase
  14. 梅科尔工作室-梁嘉莹-鸿蒙笔记1
  15. sql2000服务器的注册码,安装完成后如何找回SQL Server实例安装时的序列号
  16. 软工实践 - 第二十二次作业 项目测评(团队)
  17. 虚拟人在虚拟现实中应用的技术思考与研究
  18. c++ 取绝对值函数
  19. 云南省二级c计算机考试试题,2015云南省计算机等级考试试题 二级C试题考资料...
  20. #10008. 「一本通 1.1 练习 4」家庭作业

热门文章

  1. 第二人生的源码分析(六十四)类LLCurlEasyRequest实现Http请求
  2. html图片上传java_PhoneGap 上传图片HTML和服务器端端实现(JAVA)
  3. C# Delegate引介
  4. java stl 模型 切片_使用 Materialise magics 对 STL文件进行切片
  5. 股指期货术语大全(股指期货的意思)
  6. 计算机hp1007打印程序,HP P1007
  7. 飞思卡尔智能车一:山外鹰眼摄像头使用原理
  8. 美团开放平台品牌商接口对接步骤(Java)
  9. 【支持MSP430G2553】MSP430+BSL烧写教程
  10. 维度灾难--通过Python理解高维空间欧氏距离与余弦相似度失效