今天遍历一个ArrayList去查找某项是否存在,如果存在的话就从列表中删除,方法如下:
- for(Person p : persons){
- if(p.getName().equals(name))
- persons.remove(p);
- }
结果出现java.util.ConcurrentModificationException错误,一个并发的错误,上网google了一下,有人给出的解释是如果一边遍历ArrayList一边删除当前元素会引发java.util.ConcurrentModificationException 即”要确保遍历过程顺利完成,必须保证遍历过程中不更改集合的内容(Iterator的remove()方法除外),因此,确保遍历可靠的原则是只在一个线程中使用这个集合,或者在多线程中对遍历代码进行同步。”
解决方法1:
- //使用java.util.Iterator
- for(Iterator it = list.iterator(); it.hasNext();){
- Integer i = (Integer)it.next();
- it.remove();
- }
解决方法2:
- for(int i = 0; i<persons.size(); i++){
- if(persons.get(i).getName().equals(name))
- persons.remove(i);
- }
方法2不适合大型数组
相关推荐
Java.util.ConcurrentModificationException 异常问题详解 ConcurrentModificationException 异常是 Java 中一个常见的异常,它发生在 Iterator 遍历集合时,集合同时被修改引起的异常。在 Java 中,集合类如 ...
`java.util.ConcurrentModificationException` 是一个在 Java 中常见的运行时异常,它通常发生在多线程环境中,当一个线程正在遍历一个集合(如 `ArrayList`, `HashMap` 等),而另一个线程同时尝试修改这个集合时。...
`java.util`包中的`Collection`接口和其子接口(如`List`、`Set`)以及具体的实现类(如`ArrayList`、`LinkedList`等)构成了Java中处理数据集合的核心框架。了解它们的特性和使用方法对于编写高效、可靠的Java程序...
Java语言的Util类详细介绍 ...虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除元素),Iterator将抛出...
例如,上述代码中,线程在删除ArrayList中的元素时,另一个线程尝试遍历并打印ArrayList,这将导致异常。 快速失败机制是为了防止线程间的不确定性行为,它通过迭代器内部的modCount变量来检测集合是否在迭代过程中...
### 迭代大师的修炼之道:Java中Iterator与Enhanced for loop的深度解析 #### 一、引言 在Java编程的世界里,迭代是处理集合数据的重要手段之一。本文将重点探讨两种常用的迭代方式——`Iterator`接口和`Enhanced ...
这是Java中最常见的错误之一,当尝试访问一个为null的对象的成员时,程序会抛出此异常。避免这种问题的方法是始终确保对象在使用前已经被初始化,或者在访问其成员之前进行非null检查。 二、数组越界异常...
在Java中,我们通常会使用`Iterator`来安全地遍历并修改集合,因为`Iterator`提供了`remove()`方法来删除当前迭代的元素。但如果你在不使用`Iterator`的情况下直接调用集合的`remove()`或其他修改方法,就会触发异常...
### ArrayList在Java中的实现与应用 #### 一、概述 `ArrayList`是Java中最常见的集合框架之一,它属于`java.util`包的一部分。`ArrayList`底层由数组实现,支持元素重复,并保持插入顺序,即有序性。对于增删操作...
Java中的`Iterator`接口是Java集合框架的重要组成部分,它提供了遍历集合元素的机制。`Iterator`被设计用来遍历各种类型的集合,如ArrayList、LinkedList、Set等。在这个主题中,我们将深入理解`Iterator`的工作原理...
这种机制下的集合容器,例如HashMap和ArrayList等,都是java.util包下的集合类,它们在遍历时直接访问集合内容,因此在遍历过程中对集合数据做变更时,就会发生Fail-fast。 Fail-safe机制是一种失败安全机制,在...
在Java中,线程安全的集合主要分为三类:同步集合、并发集合和不可变集合。 1. 同步集合(Synchronized Collections): 这些是基于非线程安全的集合(如ArrayList、HashMap)通过`Collections.synchronized*`方法...
ArrayList是Java中`java.util`包下的一个类,它是List接口的一个具体实现。ArrayList基于动态数组,允许我们在列表的任何位置插入和删除元素,提供了快速访问元素的能力。其内部实现通过扩容机制来保证在添加元素时...
使用原始类型的集合,如`List<int>`,在Java中是不允许的。通常应该使用泛型,如`List<Integer>`。在传递集合参数时,若使用未指定类型的`List`,可能导致类型安全问题,如上述示例中的`ClassCastException`。 除...
Java中,可以使用`java.util.Date`和`SimpleDateFormat`类进行时间戳与日期的相互转换。例如: ```java long timestamp = System.currentTimeMillis(); // 获取当前时间戳 Date date = new Date(timestamp); // ...
`java.util.concurrent.ForkJoinPool`和`java.util.concurrent.RecursiveTask`是其核心类。 7. **非阻塞堆栈跟踪(Non-blocking Stack Traces)** 当线程处于等待状态时,Java 7可以生成不包含阻塞信息的堆栈跟踪...
本教程将通过源代码实例和详细指导,帮助你深入理解如何在Java中创建和使用只读集合。 首先,Java中的`Collections.unmodifiable*`方法是创建只读集合的常用方式。例如,`Collections.unmodifiableList()`, `...
java中,List在遍历的时候,如果被修改了会抛出java.util.ConcurrentModificationException错误。 看如下代码: import java.util.ArrayList; import java.util.List; public class Resource3 { public ...
在Java中,迭代常用于遍历集合中的所有元素,例如ArrayList、LinkedList、Set等。通常,我们可以使用for-each循环(增强for循环)来简化迭代过程,例如: ```java List<String> list = new ArrayList(); list.add(...
java.util.ArrayList,而是 Arrays 的静态内部类 java.util.Arrays.ArrayList,该类继承自抽象类 java.util.AbstractList,但没有实现 add 方法,默认抛出 java.lang_UNSUPPORTEDOPERATIONEXCEPTION 异常。...