Java中的Map如果在遍历过程中要删除元素,除非通过迭代器自己的remove()方法,否则就会导致抛出ConcurrentModificationException异常。JDK文档中是这么描述的:

The iterators returned by all of this class's "collection view methods" are fail-fast: if the map is structurally modified at any time after the iterator is created, in any way except through the iterator's own remove method, the iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.
译文:这个类的“集合视图方法”返回的迭代器是快速失败的:如果在创建迭代器之后的任何时候结构上都被修改了,那么除了通过迭代器自己的删除方法外,迭代器将抛出ConcurrentModificationException。因此,在面对并发修改时,迭代器会快速而干净地失败,而不会在将来的某个不确定的时间冒险使用任意的、不确定的行为。

这么做的原因是为了保证迭代器能够尽快感知到Map的“结构性修改“,从而避免不同视图下不一致现象

public class HashTest {public static void main(String[] args) {HashMap<Integer, Integer> count = new HashMap<Integer, Integer>();count.put(1, 11);count.put(2, 22);count.put(3, 33);//错误的 会抛出异常 ----ConcurrentModificationExceptionfor (Integer i : count.keySet()) {if(i == 2){count.remove(i);}System.out.println(i);}//正确的Iterator<Integer> it = count.keySet().iterator();while(it.hasNext()) {Integer key = it.next();if(key == 3){count.put(key, 44);}}for (Integer value : count.values()) {System.out.println(value);}}
}

转载于:https://www.cnblogs.com/cherish010/p/9178085.html

Java Map在遍历过程中删除元素相关推荐

  1. List与Map的遍历过程中删除元素

    在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的机制就容易掉入"陷阱"导致遗漏或者程序异常. List遍历过程中删除元素 使用索 ...

  2. java map遍历删除_Java Map在遍历过程中删除元素

    map遍历判断筛选删除时 如果对map使用put.remove或clear方法(例如map.remove直接删除),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModific ...

  3. 使用迭代器从map或vector中删除元素

    std:map的迭代器:删除时只影响当前元素 #include "stdafx.h" #include <map>std::map<int, int> m; ...

  4. HashMap遍历中删除元素报错

    文章目录 一.问题描述 二.问题分析 三.解决问题 四.相关问题 一.问题描述 HashMap在遍历的时候进行删除元素报错java.util.ConcurrentModificationExcepti ...

  5. 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素

    [重难点][Java集合 02]List.Set.Map 的区别.常见的线程安全的集合类.Collection 为什么只能在 Iterator 中删除元素 文章目录 [重难点][Java集合 02]L ...

  6. 如何在Java中处理ConcurrentModificationException? 在循环中从ArrayList中删除元素时要当心...

    从Java中从ArrayList中删除元素时常见的问题之一是ConcurrentModificationException. 如果您对索引使用经典的for循环或增强的for循环,并尝试使用remove ...

  7. java从数组中删除元素(数组的缩容)

    java从数组中删除元素(数组的缩容) 1,解决方案一 /* * 数组的缩容(删除元素) * 第一种解决方案 * 移动元素,被删除元素后面的元素往前移一位 * 优点:不需要创建新数组,省内存,速度快 ...

  8. java迭代器删除元素_java迭代器中删除元素的操作

    我们知道通过Iterator,可以对集合中的元素进行遍历.那么在其中遇到我们不需要的元素时,可不可以在遍历的时候顺便给删除呢?答案是当然可以.在Iterator下有一个remove函数,专门用于删除的 ...

  9. java数组中删除元素或一个数组元素

    java数组中删除元素或一个数组元素 删除数组中单个元素 删除数组中多个元素(数组表示) 这里直接介绍两种情况: 1.删除数组中单个元素 2.删除数组中多个元素(数组表示) 删除数组中单个元素 1. ...

  10. java迭代器删除元素_java迭代器中删除元素的实例操作详解

    java迭代器中删除元素的实例操作详解 2021-01-21 16:40:08 我们知道通过Iterator,可以对集合中的元素进行遍历.那么在其中遇到我们不需要的元素时,可不可以在遍历的时候顺便给删 ...

最新文章

  1. matlab图形绘制基础(东北大学MOOC笔记)
  2. docker容器虚拟化技术_Docker,虚拟机和容器的全面介绍
  3. java串口通信DataRecive_串口通信之DataReceive事件触发时机
  4. java在主程序修改函数输出,Java通过JNI调用CUDA
  5. Codeforces-gym-101020 problem C. Rectangles
  6. 机器学习数据挖掘笔记_15(关于凸优化的一些简单概念)
  7. dofilter在java中_在Filter的doFilter中进行重定向 出现异常
  8. Java并发编程之Lock
  9. qunee for html5 绘图
  10. 从电信的广告学习情景与文案的搭配
  11. 2023mac电脑系统第三方清理软件CleanMyMacX
  12. Vue.js面试题整理
  13. forward完美转发
  14. 让程序员心动的微瞬间(亲情篇)
  15. 一款免杀php大马的解密与去后门
  16. 电子产品为什么一定要3C认证?
  17. 【学习笔记8】HTML案例3:个人简历表格设计
  18. openGauss Summit 2021圆满落幕,海量数据助力数据库跨越式发展
  19. Java8-如何将List转变为逗号分隔的字符串
  20. OPENCV-HDR图片读取,显示及转JPG

热门文章

  1. NetDevOps网络设备日志分析与环境搭建-EFK(Elasticsearch+Filebeat+Kibana)
  2. DHCP中继原理和配置(含常见配置配置误区)
  3. http --- 从输入URL到页面加载的过程发生了什么?
  4. shell-6:shell中的计算$((1+1))
  5. 用tomcat搭建https
  6. sql server 用户'sa'登录失败(错误18456)(转载)
  7. 25款有用的桌面版博客编辑器
  8. Android开发之使用Handler刷新UI控件
  9. Android使用AsyncTask设置请求超时的注意事项
  10. 我的java编程之路小小总结感想