`

java.util.ConcurrentModificationException 这个异常 针对MAP

 
阅读更多

在对一个map进行迭代遍历并删除一些符合条件的键值对的时候,容易出现
java.util.ConcurrentModificationException 这个异常

 

解决方法就是先用Iterator的方法remove,然后再调用HashMap的remove方法!!即代码如下:
Iterator<Integer> keys = gradeMap.keySet().iterator();
while(keys.hasNext()){
Integer i = keys.next();
if(!gradesIds.contains(i)){
keys.remove();    //先用Iterator的方法remove
gradeMap.remove(i);}
高并发,并且你的map是经常修改的,千万不要用HashMap,会把这个线常卡死的

要用ConcurrentHashMap ,线程安全

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java.util.ConcurrentModificationException 解决方法

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

    出现java.util.ConcurrentModificationException 问题及解决办法

    这个异常的产生是由于集合类(如HashMap)的非线程安全特性,当你在一个线程中使用迭代器遍历集合,而另一个线程在同时修改这个集合时,就会触发此异常。下面我们将深入探讨这个问题的原因、示例代码以及解决策略。 ...

    java.util.concurrent系列文章(1)

    本篇文章将深入探讨 `java.util.concurrent` 包中的一些核心概念和技术,特别是 `ConcurrentHashMap` 和 `CopyOnWriteArrayList` 这两个集合类。 #### 二、线程安全问题概述 线程安全性是指在多线程环境中,代码...

    java 集合并发操作出现的异常ConcurrentModificationException

    这个异常是由于Java集合框架的迭代器(Iterator)遵循一种称为“快速失败”(fail-fast)的策略。当迭代器检测到集合在迭代过程中被修改,它会立即抛出`ConcurrentModificationException`,而不是尝试继续迭代或返回...

    Java语言的Util类详细介绍

    但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除元素),Iterator将抛出ConcurrentModificationException异常。 Set接口是Collection接口的子接口...

    ConcurrentModificationException解决办法.md

    ConcurrentModificationException异常是在Java编程中处理集合时经常会遇到的一个问题。当集合正在被迭代时,如果同时又对其进行修改(比如增加、删除元素等操作),就可能会触发此异常。解决这个问题的方法有很多种...

    Java多线程安全集合

    - `CopyOnWriteArrayList`和`CopyOnWriteArraySet`:这些列表和集在线程安全的迭代器上有优势,因为它们在修改时复制底层数组,从而避免了迭代过程中的并发修改异常(`ConcurrentModificationException`)。...

    jdk 1.6 API 中文版帮助文档

    - `java.util.Set`和`java.util.Map`接口的实现:添加了`LinkedHashSet`和`LinkedHashMap`,保持插入顺序。 - `java.util.Iterator`的改进:支持`remove()`操作,避免抛出`ConcurrentModificationException`。 ### ...

    Java源码分析:深入探讨Iterator模式

    在Java编程语言中,集合框架(`java.util`包)提供了多种容器类来存储对象,如`List`、`Set`和`Map`等。为了遍历这些容器中的元素,Java引入了迭代器模式(Iterator Pattern),这是一种常用的设计模式,它提供了一...

    java实现遍历Map的方法

    在这种方法中,我们直接遍历Map的entrySet(),这样每次循环得到的是一个Map.Entry对象,包含了键值对的所有信息: ```java import java.util.HashMap; import java.util.Map; public class TestMap { public ...

    Java 7编程高级进阶

    在Java 7之前,你必须为每个类型的异常分别写一个`catch`块。但现在,可以使用`catch`块捕获多个不同类型的异常,只需用逗号分隔即可,这使得代码更简洁。 3. **类型推断(Type Inference for Generic Instance ...

    Java 实例 - 只读集合源代码+详细指导教程.zip

    尝试修改这个只读列表将会抛出异常: ```java readOnlyList.add("New Element"); // 运行时会抛出UnsupportedOperationException ``` 另外,Java 8引入了不可变集合的概念,如`java.util.ImmutableCollections`类...

    使用Iterator接口遍历集合元素

    否则将会引发 java.util.ConcurrentModificationException 异常。 3. Iterator 迭代器采用的是快速失败(fail-fast)机制,一旦在迭代过程中检测到该集合已经被修改(通常是程序中其它线程修改),程序立即引发 ...

    13.foreach循环_java_

    这个小视频详细介绍了如何在Java中正确使用`foreach`循环,让我们深入探讨一下相关知识点。 首先,`foreach`循环在Java 5之后引入,它的目的是简化对数组和集合的遍历。传统的`for`循环在处理这些数据结构时,需要...

    Java 10道中级面试题(2025最新版).docx

    快速失败(fail-fast)迭代器在并发修改集合时,如ArrayList,会抛出ConcurrentModificationException异常。这种迭代器假设在创建迭代器后,任何修改集合的操作都会导致迭代器失效,从而快速响应错误。而故障安全(fail...

    java-collection-all-in-one.pdf

    在java.util包和java.util.concurrent包中,Java集合框架被细分为两大类:基础集合类和并发集合类。基础集合类主要用于单线程环境中,而并发集合类则专为多线程环境设计,提供了线程安全的集合操作。 Java集合框架...

    Java HashMap 如何正确遍历并删除元素的方法小结

    这段代码将抛出 `java.util.ConcurrentModificationException` 异常,因为在遍历 HashMap 的元素过程中删除了当前所在元素,下一个待访问的元素的指针也由此丢失了。 2. 正确的删除方法 正确的删除方法是使用迭代...

Global site tag (gtag.js) - Google Analytics