[Java基础]集合的删除操作
在 Java 中,直接在遍历集合时删除元素会引发 ConcurrentModificationException,因为集合的结构在迭代过程中发生了变化。为了避免这种问题,可以使用 Iterator 或 ListIterator 来进行安全删除。下面介绍几种常见的方式。
1. 使用 Iterator 进行删除
使用 Iterator 是在遍历集合时删除元素的推荐方法。Iterator 提供了 remove() 方法,可以安全地删除当前遍历到的元素。
示例:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
if (fruit.equals("banana")) {
iterator.remove(); // 使用迭代器的 remove 方法删除元素
}
}
System.out.println(list); // 输出: [apple, orange]
}
}
在这个例子中,iterator.remove() 方法用于安全地删除当前元素 banana。
2. 使用 ListIterator (仅限于 List 集合)
ListIterator 是 Iterator 的增强版本,适用于 List 集合。除了 remove(),它还支持 add() 和 set() 等操作,可以向前和向后遍历集合。
示例:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
String fruit = listIterator.next();
if (fruit.equals("banana")) {
listIterator.remove(); // 使用 ListIterator 的 remove 方法删除元素
}
}
System.out.println(list); // 输出: [apple, orange]
}
}
3. 使用 removeIf() 方法(Java 8+)
在 Java 8 及以上版本中,可以使用 removeIf() 方法结合 Lambda 表达式,简洁地删除符合条件的元素。
示例:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
// 删除等于 "banana" 的元素
list.removeIf(fruit -> fruit.equals("banana"));
System.out.println(list); // 输出: [apple, orange]
}
}
removeIf() 方法会根据提供的条件判断是否删除元素,这种方法相对简单明了,适合在条件筛选的场景下使用。
总结:
Iterator的remove()方法:适用于所有集合类型。ListIterator的remove()方法:适用于List类型的集合,可以双向遍历。removeIf()方法:Java 8 引入,适用于更简洁的条件删除操作。
这几种方式能够有效避免遍历时直接修改集合结构导致的 ConcurrentModificationException。

浙公网安备 33010602011771号