Java List循环安全删除元素

Java List循环安全删除元素的几种方式如下:

  1. 使用迭代器(Iterator):通过调用List的iterator()方法获取List的迭代器,然后使用迭代器的remove()方法删除元素。这种方式可以避免在遍历过程中修改List导致的并发修改异常(ConcurrentModificationException)。

示例代码:

java 复制代码
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class SafeRemoveDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String item = iterator.next();
            if ("B".equals(item)) {
                iterator.remove();
            }
        }

        System.out.println(list);
    }
}
  1. 使用Java 8的Stream API:通过调用List的stream()方法创建一个Stream对象,然后使用Stream的filter()和collect()方法过滤并收集需要保留的元素。这种方式也可以避免在遍历过程中修改List导致的并发修改异常。

示例代码:

java 复制代码
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class SafeRemoveDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        List<String> filteredList = list.stream()
                .filter(item -> !"B".equals(item))
                .collect(Collectors.toList());

        System.out.println(filteredList);
    }
}
  1. 使用CopyOnWriteArrayList:CopyOnWriteArrayList是一种特殊的List实现,它在进行修改操作时(如add、set等)会复制一个新的底层数组,然后在新的数组上进行修改,最后将新数组赋值给原数组。这样,在遍历过程中对CopyOnWriteArrayList进行修改操作不会导致并发修改异常。但是,CopyOnWriteArrayList的性能较差,因为它需要频繁地复制底层数组。因此,在不需要在遍历过程中修改List的情况下,建议使用其他方式。
相关推荐
九月十九5 分钟前
AviatorScript用法
java·服务器·前端
翻晒时光12 分钟前
深入解析Java集合框架:春招面试要点
java·开发语言·面试
sin220124 分钟前
MyBatis-Plus的插件
java·mybatis
小丁爱养花31 分钟前
Spring MVC:综合练习 - 深刻理解前后端交互过程
java·spring·mvc
五行星辰1 小时前
Java 生成 PDF 文档 如此简单
java·pdf·maven
菜鸟阿康学习编程1 小时前
JavaWeb 学习笔记 XML 和 Json 篇 | 020
xml·java·前端
是小崔啊1 小时前
Spring源码05 - AOP深入代理的创建
java·spring
等一场春雨2 小时前
Java设计模式 八 适配器模式 (Adapter Pattern)
java·设计模式·适配器模式
一弓虽2 小时前
java基础学习——jdbc基础知识详细介绍
java·学习·jdbc·连接池
王磊鑫2 小时前
Java入门笔记(1)
java·开发语言·笔记