当前位置: 首页 > news >正文

Java List循环安全删除元素

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

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

示例代码:

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导致的并发修改异常。

示例代码:

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的情况下,建议使用其他方式。
http://www.lryc.cn/news/140303.html

相关文章:

  • 2023年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • bert-base-chinese 判断上下句
  • vue3+vue-cli使用mockjs
  • Android 全局监听软键盘弹起隐藏 动态修改布局并适配无限循环的问题
  • 第 k 小整数
  • LeetCode 1448. 统计二叉树中好节点的数目:DFS
  • AR室内导航技术之技术说明与效果展示
  • 06-Numpy基础-线性代数
  • SpringBootWeb 登录认证
  • 【JVM 内存结构丨栈】
  • LeetCode 138.复制带随机指针的链表
  • 基于SSM的小说网站的设计与实现(论文+源码)_kaic
  • 【Python】代理池针对ip拦截破解
  • P1065 [NOIP2006 提高组] 作业调度方案
  • 设计模式三原则
  • dll载入时发生的事情
  • k8s-ingress-context deadline exceeded
  • css盒模型
  • cuda11.1和cuDNN v8.8.1的安装目录问题
  • 微信小程序scroll-view的触发机制
  • 为本地文件创建URL
  • UI位置与布局
  • 《存储IO路径》专题:DDIO对系统性能的影响
  • ModaHub魔搭社区:WinPlan经营大脑数据采集
  • 缓存最佳实践
  • Linux 终端命令之文件目录操作,对比Dos相关命令
  • C++学习第十八天----switch语句
  • 基于poi生成excel模板并生成下拉选择框
  • Redis五种类型
  • 通过IP地址如何防范钓鱼网站诈骗?