众所周知,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移除元素的若干种方法相关推荐

  1. JS数组移除元素的八种方法

    JS数组移除元素的八种方法 一.修改arr的length方法 let arr = [1,2,3,4,5,6,7,8,9]; arr.length = 3; console.log('length',a ...

  2. Python遍历列表时删除元素的几种方法

    问题来源: 删除列表中的指定元素 描述: 输入一个整数列表,并输入一个整数x,删除列表中所有值为x的数,再输出列表. 问题代码: a = list(eval(input())) x = eval(in ...

  3. Javascript循环删除数组中元素的3种方法

    本文主要跟大家分享了关于Javascript循环删除数组中元素的几种方法,分享出来供大家参考学习,下面与微点阅读小编一起来看看详细的介绍: 问题 大家在码代码的过程中,经常会遇到在循环中移除指定元素的 ...

  4. 《 Python List列表全实例详解系列(四)》__列表删除元素(4种方法)删除重复元素(去重)(8种方法)

    <  Python List列表全实例详解系列(四)> __列表删除元素(4种方法)删除重复元素(去重)(8种方法) 我的技术成长&学习资料整理分享之路 我遇到问题查找资料时,经常 ...

  5. golang string 加号连接性能慢_面试必备:浅析C#性能优化的若干种方法

    浅析C#性能优化的若干种方法 1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意. 1.1.1 避免不必要的对象创建 由于垃圾回收的代 ...

  6. 对于一个html元素,有几种方法修改样式方法的优先级,HTMLCSS常见面试题及疑难解答...

    HTML&CSS常见面试题及疑难解答 HTML篇 对web标准以及W3C的理解与认识? WEB标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组成:结构(Structure).表现( ...

  7. ArrayList删除某元素的几种方法

    ArrayList删除某元素的几种方法 环境: 开发工具:IDEA jdk:1.8 一.正序遍历: List<Integer> list = new ArrayList();list.ad ...

  8. php删除数组指定的元素,php删除数组中指定值的元素的几种方法

    php删除数组中指定值的元素的几种方法 发布时间:2020-11-11 10:44:07 来源:亿速云 阅读:102 作者:小新 这篇文章主要介绍php删除数组中指定值的元素的几种方法,文中介绍的非常 ...

  9. JAVA输出数组元素的三种方法(for/for each/toString)

    2022_02_19学习输出数组元素的三种方法以及c语言和java中数组的不同点 方法一:for循环输出数组元素 方法二:for each循环语句 方法三:Arrays类中的toString方法 c语 ...

最新文章

  1. 你还在用GDB调试程序吗?
  2. 26 岁创造 UNIX,退休后却成为一名飞行员
  3. .net中窗体之间的数据交换总结
  4. 帝国cms用php输出点击数量,帝国CMS信息增加随机点击数的修改方法(最新教程)
  5. 让我的 .NET Core 博客系统支持 Docker
  6. CF603D Ruminations on Ruminants(计算几何/Simson theorem)
  7. 牛客练习赛 60(待补E-长链剖分或者dsu)
  8. java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器
  9. 2019 sample-free(样本不平衡)目标检测论文阅读笔记
  10. 被嘲“狗都不如”的那个人,年入1000万了
  11. Redis-数据结构02-简单动态字符串(sds)
  12. node.js调用外部接口
  13. VSCode无法写入用户设置 请打开用户设置并清除错误或警告, 然后重式
  14. UVA160 Factors and Factorials【筛选法】
  15. 台大李宏毅Machine Learning 2017Fall学习笔记 (6)Logistic Regression
  16. aspect ratio - 宽高比
  17. 十三经结业:《诗经》之《蒹葭》赏析
  18. 计算机主机的输出设备,计算机的输出设备有哪些呢?
  19. fastadmin btn-ajax,FastAdmin 在线命令生成时出错的分析
  20. Xsell中常用的Linux命令

热门文章

  1. OSChina 周四乱弹 ——裸辞回家
  2. 中医药知识图谱创建与应用辅导资料汇编
  3. 2012年IT行业十大急需人才
  4. Python:tempfile 模块(临时文件和目录的处理)
  5. 微博收购一下科技直播业务,借此补齐了图文、直播、短视频等多种媒介形态。
  6. 河南理工大学python挂科率_河南理工大学新闻网
  7. xbox360 计算身高的办法
  8. 编程题:安卓图案解锁
  9. 正确使用NIS图象缩放技术加速游戏
  10. 【20200708】CISA考题练习