首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >遍历删除List中的元素

遍历删除List中的元素

作者头像
java达人
发布2018-01-31 11:59:03
4.6K0
发布2018-01-31 11:59:03
举报
文章被收录于专栏:java达人java达人java达人

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

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

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

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

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

Java代码

/** 
 * 使用增强的for循环 
 * 在循环过程中从List中删除元素以后,继续循环List时会报ConcurrentModificationException 
 */ 
public void listRemove() {  
    List<Student> students = this.getStudents();  
 for (Student stu : students) {  
 if (stu.getId() == 2)   
            students.remove(stu);  
    }  
}  

Java代码

/** 
 * 像这种使用增强的for循环对List进行遍历删除,但删除之后马上就跳出的也不会出现异常 
 */ 
public void listRemoveBreak() {  
    List<Student> students = this.getStudents();  
 for (Student stu : students) {  
 if (stu.getId() == 2) {  
            students.remove(stu);  
 break;  
        }  
    }  
}  

Java代码

/** 
 * 这种遍历有可能会遗漏某个元素,因为删除元素后List的size在 
 * 变化,元素的索引也在变化,比如你循环到第2个元素的时候你把它删了, 
 * 接下来你去访问第3个元素,实际上访问到的是原先的第4个元素。当访问的元素 
 * 索引超过了当前的List的size后还会出现数组越界的异常,当然这里不会出现这种异常, 
 * 因为这里每遍历一次都重新拿了一次当前List的size。 
 */ 
public void listRemove2() {  
    List<Student> students = this.getStudents();  
 for (int i=0; i<students.size(); i++) {  
 if (students.get(i).getId()%3 == 0) {  
            Student student = students.get(i);  
            students.remove(student);  
        }  
    }  
}  

注:你可以考虑下从尾部开始遍历删除,会发现很神奇的效果。

Java代码

/** 
 * 使用Iterator的方式也可以顺利删除和遍历 
 */ 
public void iteratorRemove() {  
    List<Student> students = this.getStudents();  
    System.out.println(students);  
    Iterator<Student> stuIter = students.iterator();  
 while (stuIter.hasNext()) {  
        Student student = stuIter.next();  
 if (student.getId() % 2 == 0)  
            stuIter.remove();//这里要使用Iterator的remove方法移除当前对象,如果使用List的remove方法,则同样会出现ConcurrentModificationException 
    }  
    System.out.println(students);  
}  

Java代码

public class Student {  
 
 private int id;  
 private String stuNo;  
 private String name;  
 
 public Student() {  
 
    }  
 
 public Student(int id, String stuNo, String name) {  
 this.id = id;  
 this.stuNo = stuNo;  
 this.name = name;  
    }  
 
 public int getId() {  
 return id;  
    }  
 
 public void setId(int id) {  
 this.id = id;  
    }  
 
 public String getStuNo() {  
 return stuNo;  
    }  
 
 public void setStuNo(String stuNo) {  
 this.stuNo = stuNo;  
    }  
 
 public String getName() {  
 return name;  
    }  
 
 public void setName(String name) {  
 this.name = name;  
    }  
 
 @Override 
 public String toString() {  
 return "Student [id=" + id + ", name=" + name + ", stuNo=" + stuNo  
                + "]";  
    }  
 
}  
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java达人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档