java中List遍历删除元素
删除末尾几个元素
import java.util.LinkedList;
import java.util.List;public class TestList {public static void main(String[] args) {// TODO Auto-generated method stubList<String> test = new LinkedList<String>();test.add("0");test.add("1");test.add("2");test.add("3");test.add("4");test.add("5");for (int i = 0; i < 3; i++) {test.remove(test.size() - 1);}for (int i = 0; i < test.size(); i++) {System.out.println(test.get(i));}}}
遍历删除元素
众所周知,java中对集合的操作属于基础内容,开发Android时间长了,这些基础有些也开始遗忘了,故在此做个总结,方便日后使用。
先说结论:
List集合的遍历删除建议使用迭代器遍历删除操作。
这是List接口中的方法,List集合调用此方法可以得到一个迭代器对象(Iterator)。
for example:
//准备数据List<Student> list = new ArrayList<>();list.add(new Student("male"));list.add(new Student("female"));list.add(new Student("female"));list.add(new Student("male"));//遍历删除,除去男生Iterator<Student> iterator = list.iterator();while (iterator.hasNext()) {Student student = iterator.next();if ("male".equals(student.getGender())) {iterator.remove();//使用迭代器的删除方法删除}}
这种使用迭代器遍历、并且使用迭代器的删除方法(remove()) 删除是正确可行的,也是开发中推荐使用的。
误区:
如果将上例中的iterator.remove(); 改为list.remove(student);将会报ConcurrentModificationException异常。
这是因为:使用迭代器遍历,却使用集合的方法删除元素的结果。
再说for循环:
总体来说,不建议使用高级for循环(增强for循环)遍历删除/增加操作。
原因就是可能会报ConcurrentModificationException异常。
说可能是比较准确的,可能会报,也可能不报。
总结干货:
1.使用高级for循环遍历删除/增加元素时,如果在某次循环的过程中进行了删除或者是增加元素的操作,使用break或者return语句结束了循环操作,不报异常。
2.使用高级for循环遍历删除/增加元素时,除了1这种情况之外,必报ConcurrentModificationException异常。
验证:
1.break/return 语句结束循环
//准备数据List<Student> list = new ArrayList<>();list.add(new Student("male"));list.add(new Student("female"));list.add(new Student("female"));list.add(new Student("male"));//遍历删除增强for循环除去男生for (Student student : list) {if ("male".equals(student.getGender())) {list.remove(student);//使用集合的删除方法删除break;//或者return}}Log.d("操作结果:", list.toString());
Log日志为:操作结果:: [Student{gender='female'}, Student{gender='female'}, Student{gender='male'}]
2.其它情况:
//高级for遍历删除元素,没有break/return
for(Student student : list){
if ("male".equals(student.getGender())) {
list.remove(student);//使用集合的删除方法删除
}
}
普通for循环:
普通for循环遍历删除也是可行的,上代码:
//准备数据List<Student> list = new ArrayList<>();list.add(new Student("male"));list.add(new Student("male"));list.add(new Student("female"));list.add(new Student("female"));list.add(new Student("male"));//普通for循环遍历删除for (int i = 0; i < list.size(); i++) {Student student = list.get(i);if ("male".equals(student.getGender())) {list.remove(i);//使用集合的删除方法删除i--;//★★★★★ 角标减一}}Log.d("普通for操作结果:", list.toString());
Log日志为:普通for操作结果:: [Student{gender='female'}, Student{gender='female'}]
这种使用普通for循环遍历删除的方法是可行的,但是如果每次删除一个元素之后忘记了将角标减一的话可能会出问题的。
问题:满足条件需要删除的元素没有完全删掉
//准备数据List<Student> list = new ArrayList<>();list.add(new Student("male"));list.add(new Student("male"));list.add(new Student("female"));list.add(new Student("female"));list.add(new Student("male"));//普通for循环遍历删除for (int i = 0; i < list.size(); i++) {Student student = list.get(i);if ("male".equals(student.getGender())) {list.remove(i);//使用集合的删除方法删除//i--;//★★★★★ 角标不减一}}Log.d("普通for操作结果:", list.toString());
Log日志为:普通for操作结果:: [Student{gender='male'}, Student{gender='female'}, Student{gender='female'}]
结果证明有一个男性的学生没有被删掉,只要有相邻元素A和B都满足删除条件,那么A被删掉,B一定会被保留下来。
————————————————
版权声明:本文为CSDN博主「github_2011」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/github_2011/article/details/54927531
java中List遍历删除元素相关推荐
- java中List遍历删除元素,Android进阶之光
一.结缘 实话说,最开始刷题的时候,刷的是 LeetCode,后来才注意到了剑指 offer 的存在,最开始也是听别人说的,剑指 offer 在面试过程中出现的概率很大,就去尝试将其都做了一遍,做的过 ...
- java list 遍历 删除元素_java中List遍历删除元素相关做法和注意事项
首先,使用简单的for循环时,list.remove()肯定是没问题的,只要注意一下下标别越界就行. 示例代码: List ll = new ArrayList(); ll.add("1&q ...
- java中Hashset集合删除元素_从Java中的HashSet中删除单个元素
要从HashSet中删除单个元素,请使用remove()方法. 首先,创建一个HashSet-HashSet hs = new HashSet(); 现在,将元素添加到HashSet-hs.add(& ...
- java set遍历删除元素_java中循环遍历删除List和Set集合中元素的方法
今天在做项目时,需要删除List和Set中的某些元素,当时使用边遍历,边删除的方法,却报了以下异常: ConcurrentModificationException 为了以后不忘记,使用烂笔头把它记录 ...
- java中map删除指定元素_Map中根据条件删除元素
今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map processM ...
- java中map怎么遍历,Java中怎么遍历Map的所有的元素
Java中怎样遍历Map的所有的元素 JDK1.4中 view plaincopy to clipboardprint? Map map = new HashMap(); Iterator it = ...
- STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...
- Java中HashMap遍历的两种方式
第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...
- java中Map遍历的四种方式
java中Map遍历的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方 ...
最新文章
- 用AI变身16岁女孩,抓住40岁违法警察!20岁男大学生钓鱼执法秀翻美国!
- 【错误记录】Flutter 报错 Downloading the Dart SDK using the BITS service failed, retrying with WebRequest...
- Nginx如何配置虚拟主机?
- 基于httpd建立私有CA实现https加密连接
- pycharm Debug问题
- unity三维地图的经纬度如何在二维地图上表示_接入C++版本recastnavigation寻路库到Unity/服务端中...
- MySQL5.7更改密码时出现ERROR 1054
- .NET快速信息化系统开发框架 V3.2-amp;gt;WinForm版本新增新的角色授权管理界面效率更高、更规范...
- Python机器学习:梯度下降法001什么是梯度下降法
- js的数组和对象的多种复制和清空, 以及区分JS数组和对象的方法
- net MongoDB安装
- Python scapy网络包嗅探模块(转载)
- matlab中平稳性检验,基于Matlab的信号平稳性检验系统
- 年薪80万难觅技术人才 杭州区块链人才需求旺盛
- IDEA: 遇到问题Error during artifact deployment. See server log for details,解决
- 基于STM32F407格式化SD卡
- 实现正六边形、圆形及带倒角正六边形的头像显示
- 易基因|ctDNA甲基化测序分析(ctDNA-WGBS)用于癌症检测和分子分型 | 精准医学
- cad命令栏怎么调出来_期货文华软件K线图上随着最新价格跳动的黄虚线怎么调出来...
- 2020-11-17
热门文章
- Swift 使用Alamofire监听网络状态
- 音视频开发-音视频面试必问的直播延迟分析丨FFmpeg|SRS流媒体服务器|webrtc|Android NDK开发|HTTP-FLV|RTSP
- Data Base学习记录:关系数据库规范
- python画十字_用OpenCV在图像上画十字
- 1609【115号文】交通运输部办公厅关于推进改革试点加快无车承运物流创新发展的意见
- cron和anacrontab
- PHP5 mysqli 绑定参数
- HTTPS如何建立安全连接
- with 语句的使用来保存二进制文件(图片,视频,音频)
- python微信语音转发_Python 微信公众号开发(2)——听得懂语音消息的聊天机器人...