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的情况下,建议使用其他方式。
相关推荐
工业甲酰苯胺30 分钟前
实现 json path 来评估函数式解析器的损耗
java·前端·json
老前端的功夫30 分钟前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
@forever@31 分钟前
【JAVA】LinkedList与链表
java·python·链表
LilySesy1 小时前
ABAP+WHERE字段长度不一致报错解决
java·前端·javascript·bug·sap·abap·alv
六件套是我1 小时前
redission实现延时队列
android·java·servlet
王元_SmallA1 小时前
Redis Desktop Manager(Redis可视化工具)安装
java·后端
ᐇ9592 小时前
Java HashMap深度解析:数据结构、原理与实战指南
java·开发语言·数据结构
好好研究2 小时前
Spring框架 - 开发方式
java·后端·spring
武子康2 小时前
Java-166 Neo4j 安装与最小闭环 | 10 分钟跑通 + 远程访问 Docker neo4j.conf
java·数据库·sql·docker·系统架构·nosql·neo4j
2301_796512523 小时前
Rust编程学习 - 为什么说Cow 代表的是Copy-On-Write, 即“写时复制技术”,它是一种高效的 资源管理手段
java·学习·rust