程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 遍歷List集合,刪除符合條件的元素,list符合條件

遍歷List集合,刪除符合條件的元素,list符合條件

編輯:JAVA綜合教程

遍歷List集合,刪除符合條件的元素,list符合條件


List集合的遍歷有三種方式:增強for循環,普通for循環,Iterator迭代器遍歷

如果只是對集合進行遍歷,以上三種循環都可正常遍歷:

(1)增強For循環遍歷List集合

List<Student> stuList = new ArrayList<Student>();
for(Student stu : stuList){
    System.out.println(stu.getName());
}

 

(2)普通For循環遍歷List集合

1 List<Student> stuList = new ArrayList<Student>();
2 for(int i = 0;i<stuList.size();i++){
3      System.out.println(stuList.get(i).getName());       
4 }   

 

(3)迭代器遍歷List集合

List<Student> stuList = new ArrayList<Student>();
Iterator iterator = stuList.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next().getName());
}

 

 

然而,如果我們要遍歷List集合,並刪除符合條件的多個元素,則只能使用Iterator迭代器,其他兩種都會報錯,看下面的例子

(1)增強For循環遍歷List集合,並刪除另外一個數組中name相同的元素

List<Student> stuList = new ArrayList<Student>();
String[] names = ["aaa","bbb","ccc"];//此處為舉例子
for(Student stu : stuList){
  for(String name : names){
     if(stu.getName() == name){
        stuList.remove(stu);//第一次刪除沒有問題,當刪除第二個元素的時候,會報ConCurrentModificationException異常
   }
   } }

(2)普通For循環遍歷List集合,並刪除另外一個數組中name相同的元素

 List<Student> stuList = new ArrayList<Student>();
String[] names = ["aaa","bbb","ccc"];//此處為舉例子 for(int i = 0;i<stuList.size();i++){
   for(String name : names){
     if(stuList.get(i).getName() == name){
      stuList.remove(i);//第一次刪除沒有問題,當多個刪除的時候,會出現跳過個別元素的情況,不能完全遍歷
   }
   } }

(3)迭代器遍歷List集合,並刪除另外一個數組中name相同的元素

List<Student> stuList = new ArrayList<Student>();
String[] names = ["aaa","bbb","ccc"];//此處為舉例子
Iterator iterator = stuList.iterator(); while(iterator.hasNext()){
  Student stu = itreator.next();
  for(String name : names){
     if(stuList.get(i).getName() == name){
      iterator.remove();//此處采用iterator本身的remove方法,可以完美解決上述問題
   }
   } }
原因:增強for循環也是利用內部的iterator來遍歷集合的,Iterator工作在一個獨立的線程中,iterator被創建後,會建立一個單鏈索引表,當原來的對象數量發生變化時,這個索引表的內容不會同步改變,所以當索引指針往後移動時,找不到迭代對象,當iterator工作時,是不允許被迭代的對象改變的,但可以被自身改變,利用Iterator的remove方法進行刪除。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved