Java Map在遍历过程中删除元素
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在遍历过程中删除元素相关推荐
- List与Map的遍历过程中删除元素
在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的机制就容易掉入"陷阱"导致遗漏或者程序异常. List遍历过程中删除元素 使用索 ...
- java map遍历删除_Java Map在遍历过程中删除元素
map遍历判断筛选删除时 如果对map使用put.remove或clear方法(例如map.remove直接删除),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModific ...
- 使用迭代器从map或vector中删除元素
std:map的迭代器:删除时只影响当前元素 #include "stdafx.h" #include <map>std::map<int, int> m; ...
- HashMap遍历中删除元素报错
文章目录 一.问题描述 二.问题分析 三.解决问题 四.相关问题 一.问题描述 HashMap在遍历的时候进行删除元素报错java.util.ConcurrentModificationExcepti ...
- 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素
[重难点][Java集合 02]List.Set.Map 的区别.常见的线程安全的集合类.Collection 为什么只能在 Iterator 中删除元素 文章目录 [重难点][Java集合 02]L ...
- 如何在Java中处理ConcurrentModificationException? 在循环中从ArrayList中删除元素时要当心...
从Java中从ArrayList中删除元素时常见的问题之一是ConcurrentModificationException. 如果您对索引使用经典的for循环或增强的for循环,并尝试使用remove ...
- java从数组中删除元素(数组的缩容)
java从数组中删除元素(数组的缩容) 1,解决方案一 /* * 数组的缩容(删除元素) * 第一种解决方案 * 移动元素,被删除元素后面的元素往前移一位 * 优点:不需要创建新数组,省内存,速度快 ...
- java迭代器删除元素_java迭代器中删除元素的操作
我们知道通过Iterator,可以对集合中的元素进行遍历.那么在其中遇到我们不需要的元素时,可不可以在遍历的时候顺便给删除呢?答案是当然可以.在Iterator下有一个remove函数,专门用于删除的 ...
- java数组中删除元素或一个数组元素
java数组中删除元素或一个数组元素 删除数组中单个元素 删除数组中多个元素(数组表示) 这里直接介绍两种情况: 1.删除数组中单个元素 2.删除数组中多个元素(数组表示) 删除数组中单个元素 1. ...
- java迭代器删除元素_java迭代器中删除元素的实例操作详解
java迭代器中删除元素的实例操作详解 2021-01-21 16:40:08 我们知道通过Iterator,可以对集合中的元素进行遍历.那么在其中遇到我们不需要的元素时,可不可以在遍历的时候顺便给删 ...
最新文章
- matlab图形绘制基础(东北大学MOOC笔记)
- docker容器虚拟化技术_Docker,虚拟机和容器的全面介绍
- java串口通信DataRecive_串口通信之DataReceive事件触发时机
- java在主程序修改函数输出,Java通过JNI调用CUDA
- Codeforces-gym-101020 problem C. Rectangles
- 机器学习数据挖掘笔记_15(关于凸优化的一些简单概念)
- dofilter在java中_在Filter的doFilter中进行重定向 出现异常
- Java并发编程之Lock
- qunee for html5 绘图
- 从电信的广告学习情景与文案的搭配
- 2023mac电脑系统第三方清理软件CleanMyMacX
- Vue.js面试题整理
- forward完美转发
- 让程序员心动的微瞬间(亲情篇)
- 一款免杀php大马的解密与去后门
- 电子产品为什么一定要3C认证?
- 【学习笔记8】HTML案例3:个人简历表格设计
- openGauss Summit 2021圆满落幕,海量数据助力数据库跨越式发展
- Java8-如何将List转变为逗号分隔的字符串
- OPENCV-HDR图片读取,显示及转JPG
热门文章
- NetDevOps网络设备日志分析与环境搭建-EFK(Elasticsearch+Filebeat+Kibana)
- DHCP中继原理和配置(含常见配置配置误区)
- http --- 从输入URL到页面加载的过程发生了什么?
- shell-6:shell中的计算$((1+1))
- 用tomcat搭建https
- sql server 用户'sa'登录失败(错误18456)(转载)
- 25款有用的桌面版博客编辑器
- Android开发之使用Handler刷新UI控件
- Android使用AsyncTask设置请求超时的注意事项
- 我的java编程之路小小总结感想