`
xiefeifeihu
  • 浏览: 100592 次
  • 性别: 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(解决方案).md

    其中一个典型的问题就是java.util.ConcurrentModificationException异常,通常在遍历集合时试图修改集合内容时抛出。Java提供了几种解决方案来应对这种情况,以下是详细的解决方法和知识点: ### 并发集合的使用 ...

    java.util.ConcurrentModificationException 解决方法

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

    java.util介绍.pdf

    - **注意事项**:使用`Vector`创建的迭代器时,如果其他线程修改了`Vector`的状态(如添加或删除元素),则可能会抛出`ConcurrentModificationException`异常。 #### 七、`Stack`类 `Stack`继承自`Vector`,实现了...

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

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

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

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

    ConcurrentModificationException如何解决.md

    在多线程编程中,对集合进行迭代时,如果同时存在对集合结构的修改,比如添加或删除元素,那么就可能会引发`ConcurrentModificationException`异常。这种异常属于运行时异常,通常出现在迭代器与集合本身的状态不...

    ConcurrentModificationException解决办法.md

    这种方式是在遍历集合的过程中,当需要删除元素时,不直接调用集合的remove方法,而是调用迭代器的remove方法。这样做可以确保在迭代器内部控制迭代过程,避免了ConcurrentModificationException异常的发生。需要...

    Java语言的Util类详细介绍

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

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

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

    ConcurrentModificationException.md

    1. ConcurrentModificationException是一个在Java中多线程环境下修改集合时可能出现的异常,它通常发生在使用迭代器遍历集合的过程中,如果有其他线程或代码块修改了集合的内容,则可能会抛出该异常。 2. 解决该...

    java Iterator迭代器的使用

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

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

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

    【Java1迭代器】Java1迭代器

    - 在某些集合中,如果在使用迭代器的过程中修改了集合结构(即添加或删除元素),除了调用迭代器的remove()方法外,可能会抛出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,但可能不反映对集合的...

Global site tag (gtag.js) - Google Analytics