国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

正確遍歷刪除List中的元素方法(推薦)

2019-11-26 13:30:07
字體:
來源:轉載
供稿:網友

遍歷刪除List中的元素有很多種方法,當運用不當的時候就會產生問題。下面主要看看以下幾種遍歷刪除List中元素的形式:

1.通過增強的for循環刪除符合條件的多個元素

2.通過增強的for循環刪除符合條件的一個元素

3.通過普通的for刪除刪除符合條件的多個元素

4.通過Iterator進行遍歷刪除符合條件的多個元素

/**   * 使用增強的for循環   * 在循環過程中從List中刪除元素以后,繼續循環List時會報ConcurrentModificationException   */  public void listRemove() {    List<Student> students = this.getStudents();    for (Student stu : students) {      if (stu.getId() == 2)         students.remove(stu);    }  }
/**   * 像這種使用增強的for循環對List進行遍歷刪除,但刪除之后馬上就跳出的也不會出現異常   */  public void listRemoveBreak() {    List<Student> students = this.getStudents();    for (Student stu : students) {      if (stu.getId() == 2) {        students.remove(stu);        break;      }    }  }
/**   * 這種遍歷有可能會遺漏某個元素,因為刪除元素后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);      }    }  }
/**   * 使用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)//這里要使用Iterator的remove方法移除當前對象,如果使用List的remove方法,則同樣會出現ConcurrentModificationException        stuIter.remove();    }    System.out.println(students);  }
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ListRemove {  public static void main(String args[]) {    ListRemove lr = new ListRemove();    lr.listRemove();    lr.listRemoveBreak();//    lr.listRemove2();//    lr.iteratorRemove();  }  /**   * 使用增強的for循環   * 在循環過程中從List中刪除元素以后,繼續循環List時會報ConcurrentModificationException   */  public void listRemove() {    List<Student> students = this.getStudents();    for (Student stu : students) {      if (stu.getId() == 2)         students.remove(stu);    }  }    /**   * 像這種使用增強的for循環對List進行遍歷刪除,但刪除之后馬上就跳出的也不會出現異常   */  public void listRemoveBreak() {    List<Student> students = this.getStudents();    for (Student stu : students) {      if (stu.getId() == 2) {        students.remove(stu);        break;      }    }  }    /**   * 這種不使用增強的for循環,每次重新獲取list的size遍歷的情況運行時不會報錯,但是可能刪除的結果是錯的。   */  public void listRemove2() {    List<Student> students = this.getStudents();    for (int i=0; i<students.size(); i++) {      if (students.get(i).getId()%2 == 0)        students.remove(i);    }  }    /**   * 使用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();    }    System.out.println(students);  }    private List<Student> getStudents() {    List<Student> students = new ArrayList<Student>() {      {        int i = 0;        while (i++ < 10) {          Student student = new Student(i, "201200" + i, "name_" + i);          this.add(student);        }      }    };    return students;  }}
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        + "]";  }  }

以上這篇正確遍歷刪除List中的元素方法(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 错那县| 光泽县| 泌阳县| 南木林县| 丰台区| 永州市| 嘉义市| 大英县| 罗山县| 融水| 平顶山市| 龙陵县| 绥棱县| 罗江县| 克什克腾旗| 吉木乃县| 团风县| 甘肃省| 河津市| 游戏| 台中市| 瑞丽市| 瓦房店市| 辽阳市| 芷江| 积石山| 洛宁县| 阿拉善左旗| 扎鲁特旗| 故城县| 洛阳市| 措美县| 嘉义县| 高青县| 台北县| 临夏市| 平山县| 雷波县| 方城县| 长海县| 甘洛县|