问题描述:在做找出数组中出现次数大于数组长度 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相关推荐

  1. Java HashMap 遍历方式性能探讨

    转载自 Java HashMap 遍历方式性能探讨 关于HashMap的实现这里就不展开了,具体可以参考JDK7与JDK8中HashMap的实现 JDK8之前,可以使用keySet或者entrySet ...

  2. HashMap遍历的两种方式,推荐使用entrySet()

    转自:HashMap遍历的两种方式,推荐使用entrySet() 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterat ...

  3. Java HashMap遍历的两种方式

    今天来搞一次HashMap 遍历的操作方式: 经过测试,方式一的效率要远高于方式二.,1000000条测试数据,第一种大概耗时20多秒,第二种耗时大概40多秒.所以,建议以后使用第一种方式. 直接上代 ...

  4. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: Map map = new HashMap ...

  5. Arraylist、HashSet去重复 treeSet排列实现方法 HashMap遍历取值

    2019独角兽企业重金招聘Python工程师标准>>> java提供的Arraylist本身不能对添加的元素进行去重,需要在添加后进行比较,如果相同就不添加 public stati ...

  6. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  7. ArrayList和HashMap遍历比较

    目录 一.ArrayList遍历方式 1.普通for循环遍历 2.增强for循环遍历 3.Iterator迭代器遍历 4.三种方式比较 二.Map遍历方式 1.增强for循环 + keySet() 遍 ...

  8. 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 ...

  9. hashmap中的key是有序的么_深入理解HashMap遍历元素的顺序

    HashMap遍历元素的顺序. 一,HashMap元素的底层存储顺序 我们都知道HashMap是"无序"的,也就是说不能保证插入顺序.但是,HashMap其实也是有序的,一组相同的 ...

最新文章

  1. OpenCV-Python形态变换、图像金字塔、轮廓属性、直方图
  2. 机器学习算法基础知识
  3. 美国科学院学报:如何在竞争激烈的环境下维持稳定的群体
  4. angular路由传递参数_@medux 路由篇
  5. opencv openpose
  6. php手册最新版本_PHP官方网站及PHP手册
  7. .Net Core2.*学习手册
  8. iterm php,iTerm2笔记
  9. 猜数字游戏python程序用函数guesssecret_Python-三、函数
  10. Java IO流之PrintStream分析
  11. UTC转换BJT时间 时间转换 c语言程序设计 mooc 翁恺
  12. 使用Spark分析拉勾网招聘信息(四): 几个常用的脚本与图片分析结果
  13. Linux系统命令行中vim编辑器取消高亮显示
  14. SparkSQL UDF使用方法与原理详解
  15. 白话SOA:面向服务+组件+架构
  16. Reactor与Netty基本操作流程总结
  17. #cs231n#Assignment2:Dropout.ipynb
  18. [转自老马的文章]用MODI OCR 21种语言
  19. 最新最全论文合集——多模态情感分析
  20. 设计模式-访问者模式练习

热门文章

  1. SnapGene 6.0.2 完美简体 不闪退
  2. ExceptionHandlerExceptionResolver : Resolved [java.lang.NullPointerException]
  3. 吴恩达深度学习课程-第三周
  4. 腾讯python面试都_记一次面试腾讯的奇葩经历
  5. 采用WPF技术,开发OFD电子文档阅读器
  6. Renice红酒发布会预热,与NGK公链共同深耕红酒领域新生态
  7. linux lftp下载目录,linux中使用lftp上传下载文件
  8. jQuery日期和时间插件 datetimepicker
  9. 智能直播审核方案:视频云智能业务截帧策略 1
  10. HTML5新特性总结(一)-新标签