如何正确遍历删除List中的元素,你会吗?

遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题。下面主要看看以下几种遍历删除List中元素的形式:

1.通过增强的for循环删除符合条件的多个元素

2.通过增强的for循环删除符合条件的一个元素

3.通过普通的for删除删除符合条件的多个元素

4.通过Iterator进行遍历删除符合条件的多个元素

 

[java] view plaincopy
  1. /**  
  2.  * 使用增强的for循环  
  3.  * 在循环过程中从List中删除非基本数据类型以后,继续循环List时会报ConcurrentModificationException  
  4.  */    
  5. public void listRemove() {    
  6.     List<Student> students = this.getStudents();    
  7.     for (Student stu : students) {    
  8.         if (stu.getId() == 2)     
  9.             students.remove(stu);    
  10.     }    
  11. }    
[java] view plaincopy
  1. /**  
  2.  * 像这种使用增强的for循环对List进行遍历删除,但删除之后马上就跳出的也不会出现异常  
  3.  */    
  4. public void listRemoveBreak() {    
  5.     List<Student> students = this.getStudents();    
  6.     for (Student stu : students) {    
  7.         if (stu.getId() == 2) {    
  8.             students.remove(stu);    
  9.             break;    
  10.         }    
  11.     }    
  12. }    
[java] view plaincopy
  1. /**  
  2.  * 这种不使用增强的for循环的也可以正常删除和遍历,  
  3.  * 这里所谓的正常是指它不会报异常,但是删除后得到的  
  4.  * 数据不一定是正确的,这主要是因为删除元素后,被删除元素后  
  5.  * 的元素索引发生了变化。假设被遍历list中共有10个元素,当  
  6.  * 删除了第3个元素后,第4个元素就变成了第3个元素了,第5个就变成  
  7.  * 了第4个了,但是程序下一步循环到的索引是第4个,  
  8.  * 这时候取到的就是原本的第5个元素了。  
  9.  */    
  10. public void listRemove2() {    
  11.     List<Student> students = this.getStudents();    
  12.     for (int i=0; i<students.size(); i++) {    
  13.         if (students.get(i).getId()%3 == 0) {    
  14.             Student student = students.get(i);    
  15.             students.remove(student);    
  16.         }    
  17.     }    
  18. }    

 

[java] view plaincopy
    1. /**  
    2.  * 使用Iterator的方式可以顺利删除和遍历  
    3.  */    
    4. public void iteratorRemove() {    
    5.     List<Student> students = this.getStudents();    
    6.     System.out.println(students);    
    7.     Iterator<Student> stuIter = students.iterator();    
    8.     while (stuIter.hasNext()) {    
    9.         Student student = stuIter.next();    
    10.         if (student.getId() % 2 == 0)    
    11.             stuIter.remove();//这里要使用Iterator的remove方法移除当前对象,如果使用List的remove方法,则同样会出现ConcurrentModificationException    
    12.     }    
    13.     System.out.println(students);    
    14. }   

转载于:https://www.cnblogs.com/toSeeMyDream/p/5818937.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter 通过json Extracted 来获取 指定的值的id

在没有 精确或模糊查询的接口时可以使用jmeter 获取指定的值的ID import java.lang.String ; String getTargetName"iphone632g"; //判读相应结果中是否包含指定值&#xff1a;iphone632g boolean containsCategoryprev.getResponseDataAsString().contains(getTarge…

mysql 结果保存到文件_将MySQL中sql运行结果保存到文件

将MySQL中sql运行结果保存到文件有两种方法。方法一&#xff1a;在mysql>提示符中使用teemysql> tee output.txtLogging to file output.txtmysql> noteeOutfile disabled.或者mysql> \T output.txtLogging to file output.txtmysql> \tOutfile disabled.这个类…

获取电脑和操作系统信息-uname

用法&#xff1a;uname [选项]...输出一组系统信息。如果不跟随选项&#xff0c;则视为只附加-s 选项。-a, --all 以如下次序输出所有信息。其中若-p 和-i 的探测结果不可知则被省略&#xff1a;-s, --kernel-name 输出内核名称-n, --nodename 输出网络节点…

MobileSpace-关于我的激情的故事

by Monte Thakkar通过Monte Thakkar MobileSpace-关于我的激情的故事 (MobileSpace — A story about my passions) 我发现&#xff0c;学习和教授iOS开发的旅程 (My journey to discovering, learning, and teaching iOS development) “Let this be the first thing you hea…

Do you have an English name? 你有英文名吗?

文中提到的所有人名都是虚构的&#xff0c;如有雷同&#xff0c;纯属巧合。当然&#xff0c;你的洋名儿也可能是德文、法文、意大利文&#xff0c;等々々々。 全球化时代&#xff0c;和老外的交流也多了。“高端”的程序员想要进欧美系外企&#xff0c;想要出国看世界&#xff…

php+nginx导入太大文件报http error错误的原因

项目中用到太多的导入导出&#xff0c;最近换了服务器&#xff0c;导致一旦文件过大就出现http error的错误&#xff0c;查找后是配置文件没有同步的原因&#xff0c;php.ini需要几个配置 upload_max_filesize 20M 表示上传的最大文件为20M post_max_size 20M 允许post提交的…

rhel 7.2 安装mysql_在rhel7.2下源码安装mysql-5.6.35

如何在一台新机rhel7.2下源码安装mysql-5.6.35一、前期准备工作1、首先安装依赖包&#xff0c;避免在安装过程中出现问题yum -y install gcc gcc-c cmake ncurses-devel autoconf perl perl-devel2、下载源码包3、创建mysql安装目录以及数据存放目录[[email protected] liuzhen…

网络安全不是奢侈品,而是必需品

2016年国家网络安全宣传周于9月19日至25日在武汉隆重举办。《长江日报》记者高萌采访了思科全球副总裁、大中华区首席技术官曹图强&#xff0c;以下是9月19日《长江日报》刊登的采访全文&#xff1a; 思科全球副总裁、大中华区首席技术官曹图强昨日下午&#xff0c;思科全球副总…

开源开发平台_电线之间:开源开发商Sindre Sorhus的采访

开源开发平台by Vivian Cromwell通过维维安克伦威尔(Vivian Cromwell) 电线之间&#xff1a;开源开发商Sindre Sorhus的采访 (Between the Wires: An interview with open source developer Sindre Sorhus) Here’s my interview Sindre Sorhus, a prolific open source devel…

白宫力挺FBI:库克干扰司法与正义

据中文业界资讯站报道&#xff0c;眼看着谷歌、Mozilla、Facebook等大组织都开始声援库克&#xff0c;美国白宫也就关于要求苹果协助解锁iPhone调查加州枪击案的事件作出了回应。白宫新闻秘书Josh Earnest强调&#xff0c;FBI并没有要求苹果重新设计产品或者是给它们留后门&…

UUID,加密解密算法的使用

注意的地方&#xff1a; Base64Encoder&#xff0c;Base64Decoder并不属于JDK标准库范畴&#xff0c;但是又包含在了JDK中 解决方法&#xff1a;按照如下方法设置Eclipse导入%JAVA_HOME%\jre\lib目录下的rt.jar包即可&#xff0c;Project->Properties,选择Java Build Path设…

sae mysql 同步本地_MYSQL入门之三_将本地MySQL数据导入SAE数据库_MySQL

bitsCN.comMYSQL入门之三_将本地MySQL数据导入SAE数据库1. MySQL字符集MySQL的默认字符集是latin1&#xff0c;将本地MySQL库导出成sql&#xff0c;再导入到SAE的MySQL时中文字符出现乱码&#xff0c;解决方法是将本地mysql默认字符集也设成utf8查看当前MySQL字符集mysql> s…

vim block vim_我如何学会爱Vim

vim block vimby Sanchit Gera通过Sanchit Gera 我如何学会爱Vim (How I learned to love Vim) I’ve had a bitter-sweet relationship with Vim for a long time.我与Vim有一段苦甜的恋情。 Over the last couple of years, I tried to learn Vim on several occasions. Ea…

AS 自定义 Gradle plugin 插件 案例 MD

Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantaosina.comAS 自定义 Gradle plugin 插件 案例 MD 目录 目录AS 中自定义 Gradle plugin编写插件传递参数发布插件到仓库使用插件AS 中自定义 Gradle plugin 参考1 参…

学好Java的10个建议

1.克服惯性  将大块任务细分为微任务。  2.关注大牛  你想学的或许是一门新的编程语言、应用框架或者是新的工具&#xff0c;一旦你确定了想要的是什么&#xff0c;就立刻去收集相应的优秀群体所做的一些优质的工作成果。这些可以从YouTube、Vimeo、HackerNews、各种博客…

中英文对照 —— 机械

0. 汽车 relay&#xff1a;继电器&#xff0c;clutch&#xff1a;离合&#xff1b; motor&#xff1a;发动机&#xff08;马达&#xff09;&#xff1b;档位&#xff1a; park&#xff1a;停车挡braking&#xff1a;制动&#xff08;也就是刹车&#xff09;空挡&#xff1a;neu…

电子邮件链接mailto_“ 3个链接”电子邮件的历史记录以及曾经发送的每个链接的存档...

电子邮件链接mailtoby Quincy Larson昆西拉尔森(Quincy Larson) “ 3个链接”电子邮件的历史记录以及曾经发送的每个链接的存档 (The history of the “3 links” email and an archive of every link ever sent) It was March 2016. The freeCodeCamp community was growing.…

机票垂直搜索引擎的性能优化

机票垂直搜索引擎的性能优化 原文:机票垂直搜索引擎的性能优化一、行业背景与垂直搜索我们先了解一下机票的行业背景&#xff0c;下图是由中航信统计的数据&#xff0c;蓝色的曲线代表平均每公里的票价&#xff0c;红色曲线指的是客运量。从2011年到2016年&#xff0c;无论是国…

2015国内征信机构大数据整合能力对比

自2001年起&#xff0c;大陆地区现代企业征信业进入在竞争中发展的阶段&#xff0c;信用问题开始得到社会各界的广泛关注&#xff0c;许多政府和民间投资的企业征信机构携带大量资本如雨后春笋般出现。 随着企业征信行业环境不断改善&#xff0c;信息透明度低的问题日益凸显。大…

Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇

前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解&#xff0c;主要是想提炼下通用装备系统结构和类体系。前两天又读了另一个插件 C# Inventory-uGui v2.0.1的源码&#xff08;应该也是老外写的&#xff09;&#xf…