`

Map遍历java.util.ConcurrentModificationException异常

 
阅读更多

for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {

。。。。。

dKeyObjectMap.remove(key);

 

}

后在执行了remove方法之后,再去执行循环,iter.next()的时候(当然,如果remove的是最后一条,就不会再去执行next()操作了)

所以,产生ConcurrentModificationException的原因就是:
执行remove(Object o)方法之后,modCount和expectedModCount不相等了。然后当代码执行到next()方法时,判断了checkForComodification(),发现两个数值不等,就抛出了该Exception。
要避免这个Exception,就应该使用remove()方法。

分享到:
评论

相关推荐

    java.util.ConcurrentModificationException 解决方法

    java.util.ConcurrentModificationException 解决方法 ... at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(HashMap.java:828) 例如以下程序(转

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

    在Java编程中,`java.util.ConcurrentModificationException` 是一个常见的运行时异常,通常发生在尝试并发修改集合时。这个异常的产生是由于集合类(如HashMap)的非线程安全特性,当你在一个线程中使用迭代器遍历...

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

    在Java编程中,`ConcurrentModificationException`是一个常见的运行时异常,主要出现在多线程环境下对集合类(如List、Set、Map等)进行并发修改时。然而,这个异常不仅限于多线程环境,即使在单线程中,如果在遍历...

    Java语言的Util类详细介绍

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

    java实现遍历Map的方法

    1. 遍历过程中修改Map可能会导致`ConcurrentModificationException`,因此在遍历时避免修改Map。 2. 如果需要按照特定顺序遍历Map,可以使用`LinkedHashMap`,它会按照插入顺序或访问顺序进行遍历。 3. 对于有序的...

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

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

    jdk 1.6 API 中文版帮助文档

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

    使用Iterator接口遍历集合元素

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

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

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

    13.foreach循环_java_

    为了安全,要么使用`Collections.synchronizedXXX`或`java.util.concurrent`包中的集合,要么在遍历前复制集合。 总的来说,`foreach`循环是Java中一种强大的工具,极大地简化了数组和集合的遍历。了解其工作原理和...

    java-collection-all-in-one.pdf

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

    Java 10道中级面试题.docx

    - Java BlockingQueue 是并发编程的重要工具,属于 `java.util.concurrent` 包。它支持阻塞的插入和移除操作,等待元素可用或空间可用。这对于实现生产者消费者模式等多线程通信场景非常有用。 4. **...

    集合框架面试题.pdf

    而java.util.concurrent包下的集合类则提供安全失败迭代器,它们在遍历时不会因为集合被修改而抛出异常,因为它们是基于集合的快照来实现的。 4. HashMap是一个用于存储键值对的集合。它基于哈希表的Map接口实现,...

    java基础 集合-22-迭代器设计模式

    Java中的`Iterator`接口位于`java.util`包下,它是所有迭代器的基类。它提供了三个核心方法: - `hasNext()`: 检查当前迭代器是否还有更多的元素,返回布尔值。 - `next()`: 返回集合中的下一个元素,如果已到达...

    Java程序员们最常犯的10个错误.docx

    然而,这返回的是一个内部类`java.util.Arrays.ArrayList`,它不支持添加元素。如果需要可变的`ArrayList`,应该使用构造函数来创建新的`ArrayList`,如: ```java ArrayList<String> arrayList = new ArrayList...

    Java实训 Java高级应用编程 第2章 集合(共33页).ppt

    在Java中,集合类位于`java.util`包内,它们为程序员提供了一种灵活的方式来存储和操作对象。 1. **集合概述**: - 集合是一个容器,可以容纳一组对象,每个对象作为一个元素存在。 - 与数组相比,集合具有动态...

    集合类编程题(2),使用迭代器(2).zip

    假设`First.java`是主程序,它可能包含创建集合、添加`Student`对象并使用迭代器遍历集合的代码。而`Student.java`可能是定义`Student`类的文件,包含`Student`的属性和方法。 在`Student.java`中,可能有如下的...

    高级程序员必会的HashMap的线程安全问题,适用于0~2年的.7z

    1. **使用线程安全的类**:Java提供了一些线程安全的Map实现,如`java.util.concurrent.ConcurrentHashMap`。ConcurrentHashMap使用分段锁技术,使得在保证线程安全的同时,提供了较好的并发性能。 2. **同步访问**...

    Java编码规范及实践

    - 避免在遍历集合时修改集合,这可能导致ConcurrentModificationException。 - 使用泛型约束类型,提高代码安全性。 10. **并发编程** - 使用线程安全的数据结构,如`Collections.synchronizedXXX()`。 - 正确...

Global site tag (gtag.js) - Google Analytics