List遍历主要有索引下标遍历、for循环遍历和Iterator迭代遍历,索引下标和for循环在遍历中删除元素都存在问题,Iterator迭代可以实现遍历中删除元素。

索引下标遍历

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(5);
list.add(6);
list.add(3);
list.add(4);for(int i = 0; i < list.size(); i++){if(list.get(i).intValue() == 3){list.remove(i);}
}System.out.println(list);
//结果 [1, 2, 2, 5, 6, 4]
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(5);
list.add(6);
list.add(3);
list.add(4);for(int i = 0; i < list.size(); i++){if(list.get(i).intValue() == 2){list.remove(i);}
}System.out.println(list);
//结果 [1, 2, 3, 5, 6, 4, 3]

遍历方式中删除元素并不会抛出异常,只是存在漏删元素的情况。
集合在删除值为3的元素时,能正确的删除两个元素。当删除值为2的元素时,只删除第一个元素。原因是删除了第一个2后,集合里的元素个数减1,后面的元素往前移了1位,导致了第二个2被遗漏了。

for循环遍历

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(5);
list.add(6);
list.add(3);
list.add(4);for(Integer item : list){if(item.intValue() == 3){list.remove(item);}
}System.out.println(list);

该代码运行会抛出异常ConcurrentModificationException

Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)at java.util.ArrayList$Itr.next(ArrayList.java:831)个at com.yihaodian.mobile.flume.client.ListDeleteTest.main(ListDeleteTest.java:19)

ConcurrentModificationException官方描述如下:
当并发修改对象,而这时对该对象的修改是不允许的,就会抛出该异常。例如,当一个线程在遍历集合的时候,其他线程不允许修改该集合。通常情况下,在遍历时修改集合,迭代结果通常是不确定的。有些迭代器检测到这种行为,就会抛出ConcurrentModificationException异常。

Iterator遍历

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(5);
list.add(6);
list.add(3);
list.add(4);Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){Integer item = iterator.next();if(item.intValue() == 2){iterator.remove();}
}System.out.println(list);
//结果 [1, 3, 5, 6, 4, 3]

Iterator能正确的删除集合中的元素,在遍历中删除元素推荐用这种方法。

List遍历中删除元素相关推荐

  1. HashMap遍历中删除元素报错

    文章目录 一.问题描述 二.问题分析 三.解决问题 四.相关问题 一.问题描述 HashMap在遍历的时候进行删除元素报错java.util.ConcurrentModificationExcepti ...

  2. hashmap移除元素_Java HashMap 如何正确遍历并删除元素的方法小结

    (一)HashMap的遍历 HashMap的遍历主要有两种方式: 第一种采用的是foreach模式,适用于不需要修改HashMap内元素的遍历,只需要获取元素的键/值的情况. HashMap myHa ...

  3. C# - 在foreach中删除元素

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在for ...

  4. List与Map的遍历过程中删除元素

    在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的机制就容易掉入"陷阱"导致遗漏或者程序异常. List遍历过程中删除元素 使用索 ...

  5. 如何在Java中处理ConcurrentModificationException? 在循环中从ArrayList中删除元素时要当心...

    从Java中从ArrayList中删除元素时常见的问题之一是ConcurrentModificationException. 如果您对索引使用经典的for循环或增强的for循环,并尝试使用remove ...

  6. java从数组中删除元素(数组的缩容)

    java从数组中删除元素(数组的缩容) 1,解决方案一 /* * 数组的缩容(删除元素) * 第一种解决方案 * 移动元素,被删除元素后面的元素往前移一位 * 优点:不需要创建新数组,省内存,速度快 ...

  7. 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素

    [重难点][Java集合 02]List.Set.Map 的区别.常见的线程安全的集合类.Collection 为什么只能在 Iterator 中删除元素 文章目录 [重难点][Java集合 02]L ...

  8. mysql for 循环删除_Java增强for循环中删除元素抛异常问题

    前言 最近突然想起刚毕业那会找工作时面试被问了个这样的问题.就是"使用增强for循环遍历ArrayList(List集合)时删除其中的元素是否会出现异常?".说实话当时真把我愣住了 ...

  9. cocos2d-x CCArray用法 遍历和删除元素

    本文为 justbilt 原创,转载请标明原作者及原文出处,以示尊重! 作者:justbilt 原文:http://blog.justbilt.com/25/ 一.基本用法 1.声明初始化变量 C++ ...

最新文章

  1. mysql复制架构迁移到pxc_mysql复制(高可用架构方案的基础)
  2. 安装Ubuntu 18.04后的一些操作
  3. php访问多重数组,PHP实现删除多重数组对象属性并重新赋值的方法
  4. C# TCP 相关类与方法
  5. linux 模拟运行 微信,Ubuntu 18.04 安装微信(Linux通用)
  6. 连接器与加载器pdf_pdf转换为excel,你不会,同事点点鼠标2分钟就搞定了
  7. Pentium II Pentium III架构/微架构/流水线 (5) - MMX
  8. 最短路 spfa算法
  9. ES的curl常用命令
  10. 2021年好看高考倒计时源码
  11. vue中的横向排列_vue + ElementUI 的横向表格代码
  12. 用 gulp require.js 和 jQuery 写一个小米项目之-----滚动商品和下面商品加载的实现
  13. B站视频下载 bilibili 哔哩哔哩
  14. 计算机专业的求职信英文版带翻译,[求职信英语作文带翻译]求职信的英语作文4篇...
  15. 三次样条拟合典型实例
  16. 华为云OBS文件上传下载工具类
  17. 你逛过凌晨4点的校园吗? -- 前端人的漫漫长路
  18. mongodb 百万_MongoDB查询性能超过500万条记录
  19. 【python】带你采集房源数据并作房价分析
  20. android最新系统排行,安卓系统最新排名公布!论流畅MIUI也只能排第六

热门文章

  1. 青岛大学计算机专硕分数线,2020青岛大学研究生分数线汇总(含2016-2019历年复试)...
  2. c++ jsoncpp的下载、编译
  3. 熊猫数据集_在日常生活中使用熊猫数据框
  4. ux设计师薪水_没有人会告诉你关于UX设计师的艰辛真相
  5. SSM框架—Spring基础—控制反转和依赖注入(概念)
  6. 小学生计算机绘画教程视频,小学生画画视频教程
  7. java爬虫实现百度地图数据爬取
  8. peakdo毫米波投屏0延迟,把把游戏当王者
  9. java overdata_使用try-catch over条件来安全地设置值,并在java中以最小的性能影响...
  10. 【华为OD机试真题 JS】英文输入法