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的情况下,建议使用其他方式。
相关推荐
全速向光8 分钟前
手机玩我的世界Java版:FCL启动器下载使用指南
java·智能手机·游戏程序
pjj1985410 分钟前
Hadoop-python中使用大数据1
java·ide·eclipse
好好沉淀15 分钟前
巧用 Set 去重与复合键:高效统计分组内不重复元素的数量
java·spring boot·后端
Wang's Blog22 分钟前
Java框架快速入门: Spring Security+OAuth2之工程结构与开发环境配置
java·spring·状态模式
lzfshub27 分钟前
Open-DIS Python发送DIS实体状态PDU:实现坦克炮塔与主炮部件参数
java·网络·python·dis
魏 无羡30 分钟前
springboot 拦截器
java·spring boot·后端
步行cgn40 分钟前
Spring Boot 绑定嵌套 Bean 详解
java·spring boot·后端
phltxy10 小时前
C语言操作符详解
java·c语言·算法
步行cgn11 小时前
@Configuration 详解:Spring 配置类的核心注解
java·后端·spring
sunshine22 girl11 小时前
Java学习一 环境配置2 安装和基本使用Idea
java·学习·intellij-idea