HashMap遍历时报ConcurrentModificationException
问题描述:在做找出数组中出现次数大于数组长度 N/K 的数 这个题目中的遍历修改hashmap中的键值映射时(要求:value = 1,则清空该键值对;否则,value - 1)抛出异常如下:
Exception in thread "main"java.util.ConcurrentModificationExceptionat java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)at java.util.HashMap$EntryIterator.next(HashMap.java:1479)at java.util.HashMap$EntryIterator.next(HashMap.java:1477)
出现原因:
Iterator做遍历的时候,HashMap被修改(bb.remove(ele), size-1),Iterator(Object ele=it.next())会检查HashMap的size,size发生变化,抛出错误ConcurrentModificationException。
解决方案:
1.使用“ConcurrentHashMap”替换HashMap,ConcurrentHashMap会自己检查修改操作,对其加锁,也可针对插入操作。
import java.util.concurrent.*;
import java.util.concurrent.ConcurrentHashMap;// ConcurrentHashMap替换HashMap
ConcurrentHashMap<Integer, Integer> cands = new ConcurrentHashMap<>();
2.先记录要删除的键,然后删除。
public static void allCandsDeleteOne(HashMap<Integer, Integer> cands) {List<Integer> removeList = new ArrayList<>();for (Map.Entry<Integer, Integer> map : cands.entrySet()) {// 遍历 k - 1 个候选人int key = map.getKey();int value = map.getValue();if (value == 1) {removeList.add(key);}cands.put(key, value - 1);}for (Integer removeKey : removeList) {cands.remove(removeKey);}
}
HashMap遍历时报ConcurrentModificationException相关推荐
- Java HashMap 遍历方式性能探讨
转载自 Java HashMap 遍历方式性能探讨 关于HashMap的实现这里就不展开了,具体可以参考JDK7与JDK8中HashMap的实现 JDK8之前,可以使用keySet或者entrySet ...
- HashMap遍历的两种方式,推荐使用entrySet()
转自:HashMap遍历的两种方式,推荐使用entrySet() 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterat ...
- Java HashMap遍历的两种方式
今天来搞一次HashMap 遍历的操作方式: 经过测试,方式一的效率要远高于方式二.,1000000条测试数据,第一种大概耗时20多秒,第二种耗时大概40多秒.所以,建议以后使用第一种方式. 直接上代 ...
- [Java] HashMap遍历的两种方式
Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: Map map = new HashMap ...
- Arraylist、HashSet去重复 treeSet排列实现方法 HashMap遍历取值
2019独角兽企业重金招聘Python工程师标准>>> java提供的Arraylist本身不能对添加的元素进行去重,需要在添加后进行比较,如果相同就不添加 public stati ...
- Java中HashMap遍历的两种方式
第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...
- ArrayList和HashMap遍历比较
目录 一.ArrayList遍历方式 1.普通for循环遍历 2.增强for循环遍历 3.Iterator迭代器遍历 4.三种方式比较 二.Map遍历方式 1.增强for循环 + keySet() 遍 ...
- Java 集合List、Set、HashMap操作一(Array转List、Set排序、HashMap遍历、Set遍历、List遍历、HashMap大小长度、List打乱顺序)
数组转集合(Array转List) import java.util.*; import java.io.*;public class ArrayToCollection{public static ...
- hashmap中的key是有序的么_深入理解HashMap遍历元素的顺序
HashMap遍历元素的顺序. 一,HashMap元素的底层存储顺序 我们都知道HashMap是"无序"的,也就是说不能保证插入顺序.但是,HashMap其实也是有序的,一组相同的 ...
最新文章
- OpenCV-Python形态变换、图像金字塔、轮廓属性、直方图
- 机器学习算法基础知识
- 美国科学院学报:如何在竞争激烈的环境下维持稳定的群体
- angular路由传递参数_@medux 路由篇
- opencv openpose
- php手册最新版本_PHP官方网站及PHP手册
- .Net Core2.*学习手册
- iterm php,iTerm2笔记
- 猜数字游戏python程序用函数guesssecret_Python-三、函数
- Java IO流之PrintStream分析
- UTC转换BJT时间 时间转换 c语言程序设计 mooc 翁恺
- 使用Spark分析拉勾网招聘信息(四): 几个常用的脚本与图片分析结果
- Linux系统命令行中vim编辑器取消高亮显示
- SparkSQL UDF使用方法与原理详解
- 白话SOA:面向服务+组件+架构
- Reactor与Netty基本操作流程总结
- #cs231n#Assignment2:Dropout.ipynb
- [转自老马的文章]用MODI OCR 21种语言
- 最新最全论文合集——多模态情感分析
- 设计模式-访问者模式练习
热门文章
- SnapGene 6.0.2 完美简体 不闪退
- ExceptionHandlerExceptionResolver : Resolved [java.lang.NullPointerException]
- 吴恩达深度学习课程-第三周
- 腾讯python面试都_记一次面试腾讯的奇葩经历
- 采用WPF技术,开发OFD电子文档阅读器
- Renice红酒发布会预热,与NGK公链共同深耕红酒领域新生态
- linux lftp下载目录,linux中使用lftp上传下载文件
- jQuery日期和时间插件 datetimepicker
- 智能直播审核方案:视频云智能业务截帧策略 1
- HTML5新特性总结(一)-新标签