List遍历中删除元素
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遍历中删除元素相关推荐
- HashMap遍历中删除元素报错
文章目录 一.问题描述 二.问题分析 三.解决问题 四.相关问题 一.问题描述 HashMap在遍历的时候进行删除元素报错java.util.ConcurrentModificationExcepti ...
- hashmap移除元素_Java HashMap 如何正确遍历并删除元素的方法小结
(一)HashMap的遍历 HashMap的遍历主要有两种方式: 第一种采用的是foreach模式,适用于不需要修改HashMap内元素的遍历,只需要获取元素的键/值的情况. HashMap myHa ...
- C# - 在foreach中删除元素
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在for ...
- List与Map的遍历过程中删除元素
在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的机制就容易掉入"陷阱"导致遗漏或者程序异常. List遍历过程中删除元素 使用索 ...
- 如何在Java中处理ConcurrentModificationException? 在循环中从ArrayList中删除元素时要当心...
从Java中从ArrayList中删除元素时常见的问题之一是ConcurrentModificationException. 如果您对索引使用经典的for循环或增强的for循环,并尝试使用remove ...
- java从数组中删除元素(数组的缩容)
java从数组中删除元素(数组的缩容) 1,解决方案一 /* * 数组的缩容(删除元素) * 第一种解决方案 * 移动元素,被删除元素后面的元素往前移一位 * 优点:不需要创建新数组,省内存,速度快 ...
- 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素
[重难点][Java集合 02]List.Set.Map 的区别.常见的线程安全的集合类.Collection 为什么只能在 Iterator 中删除元素 文章目录 [重难点][Java集合 02]L ...
- mysql for 循环删除_Java增强for循环中删除元素抛异常问题
前言 最近突然想起刚毕业那会找工作时面试被问了个这样的问题.就是"使用增强for循环遍历ArrayList(List集合)时删除其中的元素是否会出现异常?".说实话当时真把我愣住了 ...
- cocos2d-x CCArray用法 遍历和删除元素
本文为 justbilt 原创,转载请标明原作者及原文出处,以示尊重! 作者:justbilt 原文:http://blog.justbilt.com/25/ 一.基本用法 1.声明初始化变量 C++ ...
最新文章
- mysql复制架构迁移到pxc_mysql复制(高可用架构方案的基础)
- 安装Ubuntu 18.04后的一些操作
- php访问多重数组,PHP实现删除多重数组对象属性并重新赋值的方法
- C# TCP 相关类与方法
- linux 模拟运行 微信,Ubuntu 18.04 安装微信(Linux通用)
- 连接器与加载器pdf_pdf转换为excel,你不会,同事点点鼠标2分钟就搞定了
- Pentium II Pentium III架构/微架构/流水线 (5) - MMX
- 最短路 spfa算法
- ES的curl常用命令
- 2021年好看高考倒计时源码
- vue中的横向排列_vue + ElementUI 的横向表格代码
- 用 gulp require.js 和 jQuery 写一个小米项目之-----滚动商品和下面商品加载的实现
- B站视频下载 bilibili 哔哩哔哩
- 计算机专业的求职信英文版带翻译,[求职信英语作文带翻译]求职信的英语作文4篇...
- 三次样条拟合典型实例
- 华为云OBS文件上传下载工具类
- 你逛过凌晨4点的校园吗? -- 前端人的漫漫长路
- mongodb 百万_MongoDB查询性能超过500万条记录
- 【python】带你采集房源数据并作房价分析
- android最新系统排行,安卓系统最新排名公布!论流畅MIUI也只能排第六
热门文章
- 青岛大学计算机专硕分数线,2020青岛大学研究生分数线汇总(含2016-2019历年复试)...
- c++ jsoncpp的下载、编译
- 熊猫数据集_在日常生活中使用熊猫数据框
- ux设计师薪水_没有人会告诉你关于UX设计师的艰辛真相
- SSM框架—Spring基础—控制反转和依赖注入(概念)
- 小学生计算机绘画教程视频,小学生画画视频教程
- java爬虫实现百度地图数据爬取
- peakdo毫米波投屏0延迟,把把游戏当王者
- java overdata_使用try-catch over条件来安全地设置值,并在java中以最小的性能影响...
- 【华为OD机试真题 JS】英文输入法