遍历List移除元素的若干种方法
众所周知,List在for、while正常遍历过程中,如果remove元素,容易出现ConcurrentModificationException 异常,根本原因的话,之前ArrayList源码分析文章已经讲过,各位有兴趣可以移步阅读,本文主要整理遍历List过程中安全移除元素的三种方法。
1.正序删除
for (int i = 0; i < size; i++) {list.remove(i);i--;size--;}
2.迭代器删除
迭代器 Iterator 是什么?
Iterator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。
Iterator 怎么使用?有什么特点?
Iterator 使用代码如下:
List<String> list = new ArrayList<>();Iterator<String> it = list. iterator();while(it. hasNext()){String obj = it. next();System. out. println(obj);}
Iterator 的特点是只能单向遍历,但是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出 ConcurrentModificationException 异常。
如何边遍历边移除 Collection 中的元素?
边遍历边修改 Collection 的唯一正确方式是使用 Iterator.remove() 方法,如下:
Iterator<Integer> it = list.iterator();while(it.hasNext()){*// do something*it.remove();}
一种最常见的错误代码如下:
for(Integer i : list){list.remove(i)}
运行以上错误代码会报 ConcurrentModificationException 异常。这是因为当使用 foreach(for(Integer i : list)) 语句时,会自动生成一个iterator 来遍历该 list,但同时该 list 正在被 Iterator.remove() 修改。Java 一般不允许一个线程在遍历 Collection 时另一个线程修改它。
3.倒叙遍历删除
for(int i=list.size()-1; i>-1; i--){if(list.get(i).equals("123")){list.remove(list.get(i));}
遍历List移除元素的若干种方法相关推荐
- JS数组移除元素的八种方法
JS数组移除元素的八种方法 一.修改arr的length方法 let arr = [1,2,3,4,5,6,7,8,9]; arr.length = 3; console.log('length',a ...
- Python遍历列表时删除元素的几种方法
问题来源: 删除列表中的指定元素 描述: 输入一个整数列表,并输入一个整数x,删除列表中所有值为x的数,再输出列表. 问题代码: a = list(eval(input())) x = eval(in ...
- Javascript循环删除数组中元素的3种方法
本文主要跟大家分享了关于Javascript循环删除数组中元素的几种方法,分享出来供大家参考学习,下面与微点阅读小编一起来看看详细的介绍: 问题 大家在码代码的过程中,经常会遇到在循环中移除指定元素的 ...
- 《 Python List列表全实例详解系列(四)》__列表删除元素(4种方法)删除重复元素(去重)(8种方法)
< Python List列表全实例详解系列(四)> __列表删除元素(4种方法)删除重复元素(去重)(8种方法) 我的技术成长&学习资料整理分享之路 我遇到问题查找资料时,经常 ...
- golang string 加号连接性能慢_面试必备:浅析C#性能优化的若干种方法
浅析C#性能优化的若干种方法 1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意. 1.1.1 避免不必要的对象创建 由于垃圾回收的代 ...
- 对于一个html元素,有几种方法修改样式方法的优先级,HTMLCSS常见面试题及疑难解答...
HTML&CSS常见面试题及疑难解答 HTML篇 对web标准以及W3C的理解与认识? WEB标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组成:结构(Structure).表现( ...
- ArrayList删除某元素的几种方法
ArrayList删除某元素的几种方法 环境: 开发工具:IDEA jdk:1.8 一.正序遍历: List<Integer> list = new ArrayList();list.ad ...
- php删除数组指定的元素,php删除数组中指定值的元素的几种方法
php删除数组中指定值的元素的几种方法 发布时间:2020-11-11 10:44:07 来源:亿速云 阅读:102 作者:小新 这篇文章主要介绍php删除数组中指定值的元素的几种方法,文中介绍的非常 ...
- JAVA输出数组元素的三种方法(for/for each/toString)
2022_02_19学习输出数组元素的三种方法以及c语言和java中数组的不同点 方法一:for循环输出数组元素 方法二:for each循环语句 方法三:Arrays类中的toString方法 c语 ...
最新文章
- 你还在用GDB调试程序吗?
- 26 岁创造 UNIX,退休后却成为一名飞行员
- .net中窗体之间的数据交换总结
- 帝国cms用php输出点击数量,帝国CMS信息增加随机点击数的修改方法(最新教程)
- 让我的 .NET Core 博客系统支持 Docker
- CF603D Ruminations on Ruminants(计算几何/Simson theorem)
- 牛客练习赛 60(待补E-长链剖分或者dsu)
- java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器
- 2019 sample-free(样本不平衡)目标检测论文阅读笔记
- 被嘲“狗都不如”的那个人,年入1000万了
- Redis-数据结构02-简单动态字符串(sds)
- node.js调用外部接口
- VSCode无法写入用户设置 请打开用户设置并清除错误或警告, 然后重式
- UVA160 Factors and Factorials【筛选法】
- 台大李宏毅Machine Learning 2017Fall学习笔记 (6)Logistic Regression
- aspect ratio - 宽高比
- 十三经结业:《诗经》之《蒹葭》赏析
- 计算机主机的输出设备,计算机的输出设备有哪些呢?
- fastadmin btn-ajax,FastAdmin 在线命令生成时出错的分析
- Xsell中常用的Linux命令