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

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

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

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

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

  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. }
  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. }
  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. }
    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. }

如何正确遍历删除List中的元素,你会吗?的更多相关文章

  1. 正确遍历删除List中的元素方法(推荐)

    遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合 ...

  2. 如何正确遍历删除List中的元素

    遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合 ...

  3. 如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)

    遍历删除List中符合条件的元素主要有以下几种方法: 普通for循环 增强for循环 foreach 迭代器iterator removeIf 和 方法引用 其中使用普通for循环容易造成遗漏元素的问 ...

  4. 遍历删除List中的元素,会报错?

    经常会碰到遍历集合,然后删除里面的对象报错, 纠结半天, 百度了一下,有大神说不能用for-each,  for , 只能用迭代器,真的吗?  我就删成功了呢,看代码,请大神们指正! public s ...

  5. Java中如何优雅地删除List中的元素

    在工作中的许多场景下,我们都会使用到List这个数据结构,那么同样的有很多场景下需要删除List中的某一个元素或某几个元素,那么我们该如何正确无误地删除List中的元素的,今天我来教大家三种方式. 前 ...

  6. LintCode之删除链表中的元素

    题目描述 我的代码 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode n ...

  7. Java 删除ArrayList中重复元素,保持顺序

    // 删除ArrayList中重复元素,保持顺序          public static List<Map<String, Object>> removeDuplicat ...

  8. C#实现在foreach遍历中删除集合中的元素(方法总结)

    目录 方法一:采用for循环,并且从尾到头遍历 方法二:使用递归 方法三:通过泛型类实现IEnumerator 在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致 ...

  9. java在遍历列表的时候删除列表中某个元素

    在遍历list的时候需要删除其中的某些元素,不要用foreach遍历,需要用Iterator. List<String> list = new ArrayList<String> ...

随机推荐

  1. Content Provider 详解

    几个概念:Cursor. Content provider . Uri  .contentresolver 1. Cursor : 个人理解为数据库中的一行数据,它是每行数据的集合.它是一个类.通过它 ...

  2. java与MFC中的一些常识

    一个.java文件中可以有很多类.不过注意以下几点:1.public 权限的类只能有一个(也可以一个都没有,但最多只有1个)2.这个.java文件的文件名必须是public类的类名(一般的情况下,这里 ...

  3. ftp的实现

    ftp.h #define BUFSIZE 512#define CMDSIZE 64#define ARGSIZE 64#define PASSIVE_ON 0x1 struct ftpcmd{ c ...

  4. jsp表达式

    能够在"<%="和"%>"之间插入一个表达式(注意:不可插入语句. "<%="是一个完整的符号,"<%&q ...

  5. android中的常见对话框

    在android中对话框是一种常见的操作,常见的对话框有下面几种: 以下是xml布局文件: <LinearLayout xmlns:android="http://schemas.an ...

  6. 使用Caffe完成图像目标检测 和 caffe 全卷积网络

    一.[用Python学习Caffe]2. 使用Caffe完成图像目标检测 标签: pythoncaffe深度学习目标检测ssd 2017-06-22 22:08 207人阅读 评论(0) 收藏 举报 ...

  7. Linux内核RCU(Read Copy Update)锁简析

    在非常早曾经,大概是2009年的时候.写过一篇关于Linux RCU锁的文章<RCU锁在linux内核的演变>,如今我承认.那个时候我尽管懂了RCU锁,可是我没有能力用一种非常easy的描 ...

  8. Android UI经常使用实例 怎样实现欢迎界面(Splash Screen)

    在Android平台下.下载一个应用后,首次打开映入眼帘的便是Splash Screen,暂且不说Android的设计原则提不提倡这样的Splash Screen.先来看看一般使用Splash Scr ...

  9. 【BZOJ1975】[Sdoi2010]魔法猪学院 A*

    [BZOJ1975][Sdoi2010]魔法猪学院 Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪 ...

  10. 用live555将内网摄像机视频推送到外网服务器,附源码

    最近很多人问,如何将内网的摄像机流媒体数据发布到公网,如果用公网与局域网间的端口映射方式太过麻烦,一个摄像机要做一组映射,而且不是每一个局域网都是有固定ip地址,即使外网主机配置好了每一个摄像机的映射 ...