Java集合类ArrayList循环中删除特定元素
在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素。
一种错误的方式:
- for(int i = 0 , len= list.size();i<len;++i){
- if(list.get(i)==XXX){
- list.remove(i);
- }
- }
上面这种方式会抛出如下异常:
- Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
- at java.util.ArrayList.RangeCheck(Unknown Source)
- at java.util.ArrayList.get(Unknown Source)
- at ListDemo.main(ListDemo.java:20)
因为你删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常咯。
可以对上面的程序进行如下改进:
- for(int i = 0 , len= list.size();i<len;++i){
- if(list.get(i)==XXX){
- list.remove(i);
- --len;//减少一个
- --i;//多谢deny_guoshou指正,如果不加会出现评论1楼所说的情况。
- }
- }
上面的代码就正确了。
下面我们再介绍一种方案:
List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。
- Iterator<String> sListIterator = list.iterator();
- while(sListIterator.hasNext()){
- String e = sListIterator.next();
- if(e.equals("3")){
- sListIterator.remove();
- }
- }
上面这种也是正确的,并推荐使用第二种方案。
两种方案实现原理都差多的,第二种只是jdk封装了下。
查看ArrayList源码会发现很多方法内部都是基于iterator接口实现的,所以推荐使用第二种方案。
from: https://blog.csdn.net/lazy_p/article/details/7365324
Java集合类ArrayList循环中删除特定元素相关推荐
- java arraylist 对象 删除_如何从Java中的ArrayList对象中删除冗余元素?
接口集不允许重复的元素.茶add() 此接口的方法接受元素并添加到Set对象,如果添加成功,则如果您尝试使用此方法添加现有元素,则返回true,添加操作将返回false. 因此,要删除ArrayLis ...
- python删除数组特定元素_如何使用python从数组中删除特定元素
我想写一些东西从数组中删除一个特定的元素. 我知道我必须for遍历数组以查找与内容匹配的元素. 假设我有一系列电子邮件,并且想摆脱与某些电子邮件字符串匹配的元素. 我实际上想使用for循环结构,因为我 ...
- java在循环中删除数组元素,在循环Perl中删除数组中的元素
好吧,这是处理问题的一种方法(在某种程度上我理解你想做什么) . 每当您需要回答有关成员资格的问题时,您可能希望使用哈希值 . use strict; use warnings; my @array1 ...
- python List中删除特定元素
在List中删掉一个值的话,有很多方法: remove() 该方法会根据元素本身的值来进行删除操作. 需要注意的是,remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的, ...
- java arraylist 删除_Java ArrayList删除特定元素的方法
来源 http://developer.51cto.com/art/201503/469612.htm ArrayList是最常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定 ...
- Java循环中删除一个列表元素
本文主要想讲述一下我对之前看到一篇文章的说法.假设跟你的想法有出入,欢迎留言.一起讨论. #3. 在循环中删除一个列表元素 考虑以下的代码.迭代过程中删除元素: ArrayList<String ...
- java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)
定义一个功能将ArrayList 集合中的重复元素删除 ArrayList 集合中是允许储存重复元素的 import java.util.ArrayList; import java.util.Ite ...
- java数组删除数组元素_如何在Java中删除数组元素
java数组删除数组元素 When we create an array in Java, we specify its data type and size. This is used by JVM ...
- mysql for 循环删除_Java增强for循环中删除元素抛异常问题
前言 最近突然想起刚毕业那会找工作时面试被问了个这样的问题.就是"使用增强for循环遍历ArrayList(List集合)时删除其中的元素是否会出现异常?".说实话当时真把我愣住了 ...
最新文章
- python扫描目录下文件_Python扫描目录读取文件,不考虑子目录
- 基于simulink的永磁无刷直流电机控制系统的仿真研究
- OpenGL ES 3.0之Texturing纹理详解(二)
- [云炬python3玩转机器学习] 5-3简单线性回归的实现
- mat-form-field must contain a MatFormFieldControl错误的解决方法
- 16软件1班安卓第一学期学习总结
- Andorid视觉新冲击-Material design语言
- asp.net Viewstate 优化
- 方舟编译器开源技术沙龙北京站首秀:让开源激活软件开发的潜力
- matlab 例题sin,matlab基础练习题(带答案).doc
- href 和 src 区别
- Python深度学习基于PyTorch (附完整PPT下载)
- python 多线程ping_Python快速多线程ping实现
- Google退出中国的三大原因和四大后果(转载)
- [基本功]辛普森悖论
- c#:判断一个数组元素中否有重复元素
- 【WiFi 6E】WiFi 6E信道分布
- Unity Sprite的概念或意义
- 【数据结构】---堆排序+TOP-K问题(了解游戏排行底层原理)
- 【wiki维基百科中文数据集】抽取wiki数据集——实操
热门文章
- HDFS 原理、架构与特性介绍--转载
- MySQL—【加餐1】高效查询方法
- 【采用】知识图谱简介及风控应用场景
- 4.4 开发模式下的测试:简化我们对链码的测试过程
- 他用几个公式解释了现金贷业务的风控与运营 (下) 2017-09-18 22:04 风控/运营/违约 “金额如此小的业务,成本极度敏感,刚开始的时候我们在数据成本和坏账成本之间特别纠结。” 以上是许
- 基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
- Java Review - HashMap HashSet 源码解读
- Spring-基于注解的配置[02自动装载bean]
- 学习笔记Kafka(四)—— Kafka安装配置(3)—— Kafka多代理配置及常用操作
- 系统优化怎么做-新系统上线前做什么