在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素。

一种错误的方式:

[java] view plain copy
  1. for(int i = 0 , len= list.size();i<len;++i){
  2. if(list.get(i)==XXX){
  3. list.remove(i);
  4. }
  5. }

上面这种方式会抛出如下异常:

[java] view plain copy
  1. Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
  2. at java.util.ArrayList.RangeCheck(Unknown Source)
  3. at java.util.ArrayList.get(Unknown Source)
  4. at ListDemo.main(ListDemo.java:20)

因为你删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常咯。

可以对上面的程序进行如下改进:

[java] view plain copy
  1. for(int i = 0 , len= list.size();i<len;++i){
  2. if(list.get(i)==XXX){
  3. list.remove(i);
  4. --len;//减少一个
  5. --i;//多谢deny_guoshou指正,如果不加会出现评论1楼所说的情况。
  6. }
  7. }

上面的代码就正确了。

下面我们再介绍一种方案:

List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。

[java] view plain copy
  1. Iterator<String> sListIterator = list.iterator();
  2. while(sListIterator.hasNext()){
  3. String e = sListIterator.next();
  4. if(e.equals("3")){
  5. sListIterator.remove();
  6. }
  7. }

上面这种也是正确的,并推荐使用第二种方案。

两种方案实现原理都差多的,第二种只是jdk封装了下。

查看ArrayList源码会发现很多方法内部都是基于iterator接口实现的,所以推荐使用第二种方案。

from: https://blog.csdn.net/lazy_p/article/details/7365324

Java集合类ArrayList循环中删除特定元素相关推荐

  1. java arraylist 对象 删除_如何从Java中的ArrayList对象中删除冗余元素?

    接口集不允许重复的元素.茶add() 此接口的方法接受元素并添加到Set对象,如果添加成功,则如果您尝试使用此方法添加现有元素,则返回true,添加操作将返回false. 因此,要删除ArrayLis ...

  2. python删除数组特定元素_如何使用python从数组中删除特定元素

    我想写一些东西从数组中删除一个特定的元素. 我知道我必须for遍历数组以查找与内容匹配的元素. 假设我有一系列电子邮件,并且想摆脱与某些电子邮件字符串匹配的元素. 我实际上想使用for循环结构,因为我 ...

  3. java在循环中删除数组元素,在循环Perl中删除数组中的元素

    好吧,这是处理问题的一种方法(在某种程度上我理解你想做什么) . 每当您需要回答有关成员资格的问题时,您可能希望使用哈希值 . use strict; use warnings; my @array1 ...

  4. python List中删除特定元素

    在List中删掉一个值的话,有很多方法: remove() 该方法会根据元素本身的值来进行删除操作. 需要注意的是,remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的, ...

  5. java arraylist 删除_Java ArrayList删除特定元素的方法

    来源 http://developer.51cto.com/art/201503/469612.htm ArrayList是最常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定 ...

  6. Java循环中删除一个列表元素

    本文主要想讲述一下我对之前看到一篇文章的说法.假设跟你的想法有出入,欢迎留言.一起讨论. #3. 在循环中删除一个列表元素 考虑以下的代码.迭代过程中删除元素: ArrayList<String ...

  7. java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)

    定义一个功能将ArrayList 集合中的重复元素删除 ArrayList 集合中是允许储存重复元素的 import java.util.ArrayList; import java.util.Ite ...

  8. java数组删除数组元素_如何在Java中删除数组元素

    java数组删除数组元素 When we create an array in Java, we specify its data type and size. This is used by JVM ...

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

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

最新文章

  1. python扫描目录下文件_Python扫描目录读取文件,不考虑子目录
  2. 基于simulink的永磁无刷直流电机控制系统的仿真研究
  3. OpenGL ES 3.0之Texturing纹理详解(二)
  4. [云炬python3玩转机器学习] 5-3简单线性回归的实现
  5. mat-form-field must contain a MatFormFieldControl错误的解决方法
  6. 16软件1班安卓第一学期学习总结
  7. Andorid视觉新冲击-Material design语言
  8. asp.net Viewstate 优化
  9. 方舟编译器开源技术沙龙北京站首秀:让开源激活软件开发的潜力
  10. matlab 例题sin,matlab基础练习题(带答案).doc
  11. href 和 src 区别
  12. Python深度学习基于PyTorch (附完整PPT下载)
  13. python 多线程ping_Python快速多线程ping实现
  14. Google退出中国的三大原因和四大后果(转载)
  15. [基本功]辛普森悖论
  16. c#:判断一个数组元素中否有重复元素
  17. 【WiFi 6E】WiFi 6E信道分布
  18. Unity Sprite的概念或意义
  19. 【数据结构】---堆排序+TOP-K问题(了解游戏排行底层原理)
  20. 【wiki维基百科中文数据集】抽取wiki数据集——实操

热门文章

  1. HDFS 原理、架构与特性介绍--转载
  2. MySQL—【加餐1】高效查询方法
  3. 【采用】知识图谱简介及风控应用场景
  4. 4.4 开发模式下的测试:简化我们对链码的测试过程
  5. 他用几个公式解释了现金贷业务的风控与运营 (下) 2017-09-18 22:04 风控/运营/违约 “金额如此小的业务,成本极度敏感,刚开始的时候我们在数据成本和坏账成本之间特别纠结。” 以上是许
  6. 基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
  7. Java Review - HashMap HashSet 源码解读
  8. Spring-基于注解的配置[02自动装载bean]
  9. 学习笔记Kafka(四)—— Kafka安装配置(3)—— Kafka多代理配置及常用操作
  10. 系统优化怎么做-新系统上线前做什么