`
xiefeifeihu
  • 浏览: 99117 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

遍历集合时删除元素,抛出java.util.ConcurrentModificationException的解决办法

阅读更多

遍历集合删除其中的元素时可能会抛出java.util.ConcurrentModificationException异常。

下面的代码就会抛出异常:

1:  for (String s : map.keySet()) {
2:      if ("val".equals(s))
3:          map.remove(s);
4:  }

 

怎么解决这个问题呢?用迭代器:

1:  Iterator it = map.keySet().iterator();
2:  while (it.hasNext()) {
3:      String obj = it.next();
4:      if ("2".equals(obj)) {
5:          it.remove();
6:      }
7:  }

调用迭代器的remove方法可以安全的删除元素:it.remove();

如果用集合的remove方法:map.remove(s); 就会报java.util.ConcurrentModificationException异常:

1:  Iterator it = map.keySet().iterator();
2:  while (it.hasNext()) {
3:      String obj = it.next();
4:      if ("2".equals(obj)) {
5:          // it.remove();
6:          map.remove(obj);
7:      }
8:  }
分享到:
评论
1 楼 Randy_yahoo 2011-02-20  
我和你问题一样,如果你解决了,麻烦你告诉我声谢谢

相关推荐

    java.util.ConcurrentModificationException 异常问题详解1

    ConcurrentModificationException 异常是 Java 中一个常见的异常,它发生在 Iterator 遍历集合时,集合同时被修改引起的异常。在 Java 中,集合类如 ArrayList、LinkedList 等都可能会抛出这个异常。 在了解这个...

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

    如果在遍历过程中,集合结构发生了变化(如添加、删除或修改元素),迭代器无法预测这些变化,因此会抛出`ConcurrentModificationException`。在上述示例代码中,我们创建了一个HashMap并使用迭代器遍历其键集。在...

    java.util.ConcurrentModificationException 解决方法

    `java.util.ConcurrentModificationException` 是一个在 Java 中常见的运行时异常,它通常发生在多线程环境中,当一个线程正在遍历一个集合(如 `ArrayList`, `HashMap` 等),而另一个线程同时尝试修改这个集合时。...

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

    在这个例子中,当我们试图在遍历过程中删除一个元素时,迭代器会检测到Map的结构已被改变,从而抛出异常。这是因为迭代器在内部维护了一个指向集合的索引,当集合结构发生变化时,这个索引不再有效,导致迭代器无法...

    遍历并批量删除容器中元素出现ConcurrentModificationException原因及处置

    当你在一个迭代器正在遍历集合的过程中添加或删除元素时,就会抛出这个异常。这个问题在单线程环境下不会出现,但在多线程并发场景下,如果多个线程同时修改一个集合,就可能导致`ConcurrentModificationException`...

    Java语言的Util类详细介绍

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

    java 使用foreach遍历集合元素的实例

    在Java编程语言中,`foreach`循环是一种简洁的遍历集合元素的方式,它引入自Java 5(JDK 1.5)。`foreach`循环也被称为增强for循环,它的主要目的是简化对数组和集合的迭代操作。在本实例中,我们将深入探讨如何使用...

    java Iterator迭代器的使用

    Java中的`Iterator`接口是Java集合框架的重要组成部分,它提供了遍历集合元素的机制。`Iterator`被设计用来遍历各种类型的集合,如ArrayList、LinkedList、Set等。在这个主题中,我们将深入理解`Iterator`的工作原理...

    多线程中使用Java集合类.doc

    这意味着在多线程环境下,当一个线程正在遍历集合(通过迭代器进行)时,另一个线程修改了集合内容,就会触发快速失败(fail-fast)机制,导致ConcurrentModificationException异常。例如,上述代码中,线程在删除...

    迭代大师的修炼之道:Java中Iterator与增强for循环的深度解析

    - `Enhanced for loop`在遍历过程中不允许直接修改正在迭代的集合,否则会抛出`ConcurrentModificationException`异常。 - 当需要在遍历的同时修改集合时,应考虑使用`Iterator`或其他方法。 #### 四、进阶篇:...

    详解Java 集合类 List 的那些坑

    在直接遍历 List 集合元素时增加、删除元素会报错,例如使用 for 循环遍历 List 时删除元素,会抛出 ConcurrentModificationException 异常。解决方法是使用 Iterator 迭代器遍历 List,并使用 Iterator 的 remove ...

    【Java面试题】List如何一边遍历,一边删除?

    - 在遍历集合并修改集合内容时,应避免使用增强型for循环,因为它会抛出`ConcurrentModificationException`。 - 使用Iterator的`remove()`方法是安全的,因为它能同步迭代器和集合的状态。 - 对于使用for循环的...

    java 迭代及迭代器的小例子

    例如,在java.util.concurrent包中的ConcurrentLinkedQueue等线程安全的集合类,它们的迭代器是弱一致性(weakly consistent)的,这意味着迭代器不会抛出ConcurrentModificationException,但可能不反映对集合的...

    Java系列Iterator

    - 当集合在遍历过程中被修改(比如添加或删除元素)时,这可能导致`ConcurrentModificationException`。这是因为迭代器通常不会察觉到这种修改,除非通过迭代器自身的`remove()`方法进行操作。为了防止这种情况,...

    迭代器的用法

    迭代器在Java编程中扮演着至关重要的角色,它是一种设计模式,主要用于遍历集合类中的元素,而无需暴露集合的内部实现。迭代器模式的核心思想是解耦客户端代码与集合对象之间的关系,使得代码更加通用,易于维护。...

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

    迭代器的使用遵循“fail-fast”原则,即如果在迭代过程中修改了集合,迭代器会抛出`ConcurrentModificationException`。 现在,让我们分析给定的文件`First.java`和`Student.java`。假设`First.java`是主程序,它...

    jdk 1.6 API 中文版帮助文档

    - `java.util.Iterator`的改进:支持`remove()`操作,避免抛出`ConcurrentModificationException`。 ### 4. 性能优化 JDK 1.6对编译器和垃圾收集器进行了优化,提高了运行效率,例如: - **Server VM的改进**: ...

    【面试普通人VS高手系列】Fail-safe机制与Fail-fast机制分别有什么作用.doc

    Fail-safe机制是一种失败安全机制,在这种机制下,出现集合元素的修改,不会抛出ConcurrentModificationException异常。这种机制下的集合容器,例如CopyOnWriteArrayList和ConcurrentHashMap等,都是java.util....

    java之LinkedList操作

    例如,在示例代码中,尝试在遍历过程中通过`Iterator`删除元素时,由于在删除前已经改变了列表的状态,因此抛出了此异常。 #### 四、总结 通过上述介绍,我们可以了解到`LinkedList`在Java中的基本使用方法,包括...

Global site tag (gtag.js) - Google Analytics