假设现在一个list里的元素为:[1,2,3,3,4]

1、通过普通for循环来删除元素

for(int i=0;i<list.size();i++){if(list.get(i)==3) list.remove(i);
}
System.out.println(list);

打印:1,2,3,4

原因:当删除第一个3时,3后面元素都会向左移动,而当前index等于2,后一个3会移除到index=2的位置,因此会被跳过;如果不存在相邻元素,那么就不会出现这种情况

还有另一种解决方式,在找到对应元素时,index对应--

for(int i=0;i<list.size();i++){if(list.get(i)==3) list.remove(i--);
}
System.out.println(list);

打印1,2,4

倒序遍历也正确,向左移动并不影响右边的元素

for(int i=list.size()-1;i>=0;i--){if(list.get(i)==3){list.remove(i);}
}
System.out.println(list);

使用foreach遍历list删除元素

for(Integer i:list){if(i==3) list.remove(i);
}
System.out.println(list);

这里会直接报异常

通过阅读源码得知,foreach的本质是迭代器的遍历,遍历过程中会调用一个next()方法,如果进行了add/remove,那么当前的修改次数不等于预期的修改次数,将会导致报错,因为迭代器不允许一个元素不知不觉被添加/删除

但如果你remove/add之后就退出while循环,那么就不会报错,或者说没有下一个元素了

list删除元素时,注意int和integer的区别

list.remove(2)会直接删除index=2的元素

list.remove(new Integer(2)),则删除元素值=2的值

remove元素的正确做法:通过Iterator接口

Iterator<Integer> it=list.iterator();while(it.hasNext()){if(it.next()==3){it.remove();}}
System.out.println(list);

List里的remove方法相关推荐

  1. List中remove()方法的陷阱,被坑惨了!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/pelifymeng2/ article/details/78085836 Java的List在删 ...

  2. Datatable删除行的Delete和Remove方法介绍

    在实际项目开发中,如果要删除DataTable中的某一行,大约有以下几种办法: 使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(i ...

  3. ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作

    package C12_18;import java.util.ArrayList;public class joy {public static void main(String[] args) { ...

  4. [置顶] 有关ListIterator接口的add与remove方法探究

    ListIterator接口继承自Iterator接口,新增了add()等方法. 关于ListIterator的add()方法的作用(接口是没有方法实现的,但其实现类对于add()方法的实现机制大致相 ...

  5. java的remove iterator_Java集合 iterator.remove()方法详解

    直接上代码: public classtest {public static voidmain(String[] args) { List list = new ArrayList<>() ...

  6. 【142期】List 中 remove() 方法的“陷阱”,被坑惨了!

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... Jav ...

  7. List的remove()方法避坑

    一,前文: 首先初始化List,代码如下: package com.cicc.am.test;import java.util.ArrayList; import java.util.List;pub ...

  8. List中remove()方法的陷阱以及终极的解决方法!

    Java的List在删除元素时,一般会用list.remove(o)方法.在使用时,可能会抛出java.util.ConcurrentModificationException的异常.总结以往经验,记 ...

  9. Map里的常见方法及遍历

    1. Map里的常见方法 Map接口用来存储成对的数据 实现类: HashMap / LinkedHashMap / TreeMap / HashTable / Properties Map的特点: ...

最新文章

  1. R语言vtreat包自动处理dataframe的缺失值、使用分组的中位数来标准化数据列中每个数据的值(和中位数表连接并基于中位数进行数据标化)、计算数据列的中位数或者均值并进行数据标准化
  2. 你的火狐很慢吗? - Firefox启动和运行速度优化
  3. C++ STL下载和安装
  4. 爬虫 spider02——详析http
  5. python bp神经网络分类预测结果图_深度学习入门(四)BP神经网络——数字分类...
  6. 云开发外卖CPS小程序源码
  7. linux cocos2dx 配置文件,Linux开发cocos2dx程序环境搭建
  8. mysql简单的命令_Mysql 的一些简单的命令
  9. oracle 下和 db2的syscat 对应的,oracle db2命令对比(整理中)
  10. javascript中的||运算符
  11. 关于python中的字符串编码理解
  12. python类中导入库_python导入库的具体方法
  13. 诺基亚N8-00测评
  14. 使用Photoshop对图像进行二值化处理
  15. 常见四大类型视频接口
  16. C# 原始的方法写入xml文件的代码
  17. Java基础static关键字理解
  18. Java-Mail Java程序发送Email
  19. 【解局】瑞幸向上,盒马向下
  20. Pandas详解十之Dropna滤除缺失数据

热门文章

  1. python设计答题软件_用python制作《冲顶大会》答题工具
  2. python中win32模块的安装及使用方法
  3. Java SE Lesson 5
  4. UI设计师必备的13款常用设计工具
  5. iOS 音频录制AMR和WAV互转(支持64位)
  6. html5 二进制 上传图片,图片上传转二进制流
  7. qemu-system-riscv64 源码编译 及 运行参数
  8. 对日方向的程序员怎么快速学习日语
  9. 计算机信息系统的国内研究趋势,管理信息系统的研究背景及国内外现状
  10. 方向键不能控制选择单元格