List里的remove方法
假设现在一个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方法相关推荐
- List中remove()方法的陷阱,被坑惨了!
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/pelifymeng2/ article/details/78085836 Java的List在删 ...
- Datatable删除行的Delete和Remove方法介绍
在实际项目开发中,如果要删除DataTable中的某一行,大约有以下几种办法: 使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(i ...
- ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作
package C12_18;import java.util.ArrayList;public class joy {public static void main(String[] args) { ...
- [置顶] 有关ListIterator接口的add与remove方法探究
ListIterator接口继承自Iterator接口,新增了add()等方法. 关于ListIterator的add()方法的作用(接口是没有方法实现的,但其实现类对于add()方法的实现机制大致相 ...
- java的remove iterator_Java集合 iterator.remove()方法详解
直接上代码: public classtest {public static voidmain(String[] args) { List list = new ArrayList<>() ...
- 【142期】List 中 remove() 方法的“陷阱”,被坑惨了!
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... Jav ...
- List的remove()方法避坑
一,前文: 首先初始化List,代码如下: package com.cicc.am.test;import java.util.ArrayList; import java.util.List;pub ...
- List中remove()方法的陷阱以及终极的解决方法!
Java的List在删除元素时,一般会用list.remove(o)方法.在使用时,可能会抛出java.util.ConcurrentModificationException的异常.总结以往经验,记 ...
- Map里的常见方法及遍历
1. Map里的常见方法 Map接口用来存储成对的数据 实现类: HashMap / LinkedHashMap / TreeMap / HashTable / Properties Map的特点: ...
最新文章
- R语言vtreat包自动处理dataframe的缺失值、使用分组的中位数来标准化数据列中每个数据的值(和中位数表连接并基于中位数进行数据标化)、计算数据列的中位数或者均值并进行数据标准化
- 你的火狐很慢吗? - Firefox启动和运行速度优化
- C++ STL下载和安装
- 爬虫 spider02——详析http
- python bp神经网络分类预测结果图_深度学习入门(四)BP神经网络——数字分类...
- 云开发外卖CPS小程序源码
- linux cocos2dx 配置文件,Linux开发cocos2dx程序环境搭建
- mysql简单的命令_Mysql 的一些简单的命令
- oracle 下和 db2的syscat 对应的,oracle db2命令对比(整理中)
- javascript中的||运算符
- 关于python中的字符串编码理解
- python类中导入库_python导入库的具体方法
- 诺基亚N8-00测评
- 使用Photoshop对图像进行二值化处理
- 常见四大类型视频接口
- C# 原始的方法写入xml文件的代码
- Java基础static关键字理解
- Java-Mail Java程序发送Email
- 【解局】瑞幸向上,盒马向下
- Pandas详解十之Dropna滤除缺失数据