遍历删除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. Flash制作和软件使用

    Flash制作和软件使用 2014-11-09 ——君子善假于物也 引子 虽说FLASH在随着HTML5的发展而受阻,尤其移动终端都不再支持它了,但是在一段时间内还是重要的.近期朋友说要结婚,想弄个电 ...

  2. GoogleFusionTablesAPI初探地图与云计算

    http://developer.51cto.com/art/200906/129324.htm http://yexiaochai.iteye.com/blog/1893735 http://yex ...

  3. Spring整合Hibernate的方法

    一.基本支持 Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. Spring 对这些 ORM 框架的支持是一致的, 因此 ...

  4. 九度OJ 1088:剩下的树 (线段树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5791 解决:2649 题目描述: 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点 ...

  5. Leetcode:remove_duplicates_from_sorted_list

    一.     题目 给定一个排好序的链表,删除全部反复的节点,使每个节点都仅仅出现一次 比如: Given 1->1->2, return 1->2. Given 1->1-& ...

  6. AndroidPageObjectTest_Simple.java

    以下代码使用ApiDemos-debug.apk进行测试 //这个脚本用于演示PageFactory的功能:使用注解@FindBy.@AndroidFindBy.@IOSFindBy定位元素.注解用法 ...

  7. 升级python到最新2.7.13

    python2.7是2.X的最后一个版本,同时也加入了一部分3.X的新特性.并且具有更好的性能,修改多个bug.所以决定升级到最新的2.7版,我的目前的版本是2.6.6 查看当前python版本 # ...

  8. 不使用库函数,编写函数int strcmp(char *source, char *dest) 相等返回0,不等返回-1【转】

    本文转载自:http://www.cppblog.com/mmdengwo/archive/2011/04/14/144253.aspx #include <stdio.h>#includ ...

  9. jquery特效(4)—轮播图②(定时自动轮播)

    周末出去逛完街,就回公司好好地研究代码了,也算是把定时自动轮播程序写出来了,特意说明一下,这次的轮播图是在昨天随笔中jquery特效(3)—轮播图①(手动点击轮播)的基础上写出来的,也就是本次随笔展示 ...

  10. MySQL学习笔记(六)—— MySQL自连接

    有的时候我们需要对同一表中的数据进行多次检索,这个时候我们可以使用之前学习过的子查询,先查询出需要的数据,再进行一次检索. 例如:一张products表,有产品id,供应商id(vend_id),产品 ...