`
lalanicer
  • 浏览: 30117 次
社区版块
存档分类
最新评论

从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决

    博客分类:
  • java
 
阅读更多

今天遍历一个ArrayList去查找某项是否存在,如果存在的话就从列表中删除,方法如下:

  1. for(Person p : persons){ 
  2.         if(p.getName().equals(name)) 
  3.         persons.remove(p); 
  4. }

结果出现java.util.ConcurrentModificationException错误,一个并发的错误,上网google了一下,有人给出的解释是如果一边遍历ArrayList一边删除当前元素会引发java.util.ConcurrentModificationException 即”要确保遍历过程顺利完成,必须保证遍历过程中不更改集合的内容(Iterator的remove()方法除外),因此,确保遍历可靠的原则是只在一个线程中使用这个集合,或者在多线程中对遍历代码进行同步。”
解决方法1: 

  1. //使用java.util.Iterator 
  2. for(Iterator it = list.iterator(); it.hasNext();){  
  3.         Integer i = (Integer)it.next(); 
  4.         it.remove(); 
  5. }

解决方法2:

 
  1. for(int i = 0; i<persons.size(); i++){ 
  2.     if(persons.get(i).getName().equals(name)) 
  3.         persons.remove(i); 
  4. }

方法2不适合大型数组

分享到:
评论

相关推荐

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

    Java.util.ConcurrentModificationException 异常问题详解 ConcurrentModificationException 异常是 Java 中一个常见的异常,它发生在 Iterator 遍历集合时,集合同时被修改引起的异常。在 Java 中,集合类如 ...

    java.util.ConcurrentModificationException 解决方法

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

    java.util介绍.pdf

    `java.util`包中的`Collection`接口和其子接口(如`List`、`Set`)以及具体的实现类(如`ArrayList`、`LinkedList`等)构成了Java中处理数据集合的核心框架。了解它们的特性和使用方法对于编写高效、可靠的Java程序...

    Java语言的Util类详细介绍

    Java语言的Util类详细介绍 ...虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除元素),Iterator将抛出...

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

    例如,上述代码中,线程在删除ArrayList中的元素时,另一个线程尝试遍历并打印ArrayList,这将导致异常。 快速失败机制是为了防止线程间的不确定性行为,它通过迭代器内部的modCount变量来检测集合是否在迭代过程中...

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

    ### 迭代大师的修炼之道:Java中Iterator与Enhanced for loop的深度解析 #### 一、引言 在Java编程的世界里,迭代是处理集合数据的重要手段之一。本文将重点探讨两种常用的迭代方式——`Iterator`接口和`Enhanced ...

    JAVA.BUG模式详解

    这是Java中最常见的错误之一,当尝试访问一个为null的对象的成员时,程序会抛出此异常。避免这种问题的方法是始终确保对象在使用前已经被初始化,或者在访问其成员之前进行非null检查。 二、数组越界异常...

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

    在Java中,我们通常会使用`Iterator`来安全地遍历并修改集合,因为`Iterator`提供了`remove()`方法来删除当前迭代的元素。但如果你在不使用`Iterator`的情况下直接调用集合的`remove()`或其他修改方法,就会触发异常...

    ArrayList.docx

    ### ArrayList在Java中的实现与应用 #### 一、概述 `ArrayList`是Java中最常见的集合框架之一,它属于`java.util`包的一部分。`ArrayList`底层由数组实现,支持元素重复,并保持插入顺序,即有序性。对于增删操作...

    java Iterator迭代器的使用

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

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

    这种机制下的集合容器,例如HashMap和ArrayList等,都是java.util包下的集合类,它们在遍历时直接访问集合内容,因此在遍历过程中对集合数据做变更时,就会发生Fail-fast。 Fail-safe机制是一种失败安全机制,在...

    Java多线程安全集合

    在Java中,线程安全的集合主要分为三类:同步集合、并发集合和不可变集合。 1. 同步集合(Synchronized Collections): 这些是基于非线程安全的集合(如ArrayList、HashMap)通过`Collections.synchronized*`方法...

    java集合代码

    ArrayList是Java中`java.util`包下的一个类,它是List接口的一个具体实现。ArrayList基于动态数组,允许我们在列表的任何位置插入和删除元素,提供了快速访问元素的能力。其内部实现通过扩容机制来保证在添加元素时...

    Java程序员容易犯的10个错误

    使用原始类型的集合,如`List&lt;int&gt;`,在Java中是不允许的。通常应该使用泛型,如`List&lt;Integer&gt;`。在传递集合参数时,若使用未指定类型的`List`,可能导致类型安全问题,如上述示例中的`ClassCastException`。 除...

    java对于Json文件的解析范例

    Java中,可以使用`java.util.Date`和`SimpleDateFormat`类进行时间戳与日期的相互转换。例如: ```java long timestamp = System.currentTimeMillis(); // 获取当前时间戳 Date date = new Date(timestamp); // ...

    Java 7编程高级进阶

    `java.util.concurrent.ForkJoinPool`和`java.util.concurrent.RecursiveTask`是其核心类。 7. **非阻塞堆栈跟踪(Non-blocking Stack Traces)** 当线程处于等待状态时,Java 7可以生成不包含阻塞信息的堆栈跟踪...

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

    本教程将通过源代码实例和详细指导,帮助你深入理解如何在Java中创建和使用只读集合。 首先,Java中的`Collections.unmodifiable*`方法是创建只读集合的常用方式。例如,`Collections.unmodifiableList()`, `...

    Java中CopyOnWriteArrayList的使用

    java中,List在遍历的时候,如果被修改了会抛出java.util.ConcurrentModificationException错误。  看如下代码: import java.util.ArrayList; import java.util.List; public class Resource3 { public ...

    java 迭代及迭代器的小例子

    在Java中,迭代常用于遍历集合中的所有元素,例如ArrayList、LinkedList、Set等。通常,我们可以使用for-each循环(增强for循环)来简化迭代过程,例如: ```java List&lt;String&gt; list = new ArrayList(); list.add(...

    详解Java 集合类 List 的那些坑

    java.util.ArrayList,而是 Arrays 的静态内部类 java.util.Arrays.ArrayList,该类继承自抽象类 java.util.AbstractList,但没有实现 add 方法,默认抛出 java.lang_UNSUPPORTEDOPERATIONEXCEPTION 异常。...

Global site tag (gtag.js) - Google Analytics