1. 程式人生 > 程式設計 >解決JAVA遍歷List集合,刪除資料時出現的問題

解決JAVA遍歷List集合,刪除資料時出現的問題

一、問題描述

有時候,我們會遇到在遍歷List集合的過程中刪除資料的情況。

看著自己寫的程式碼,感覺完全沒有問題,但就是達不到預期的效果,這是為什麼呢?下面我們來分析下

String str1 = new String("1"); 
String str2 = new String("2"); 
String str3 = new String("3"); 
String str4 = new String("4"); 
String str5 = new String("5"); 
List list = new ArrayList(); 
list.add(str1); 
list.add(str2); 
list.add(str3); 
list.add(str4); 
list.add(str5); 
System.out.println("list.size()=" + list.size());     
 
for (int i = 0; i < list.size(); i++) {        
    list.remove(i);      
  // i--; 
  //System.out.println(i+" "+list.get(i)+" "); 
}     
System.out.println("after remove:list.size()=" + list.size());

本來預期結果應該是:

list.size()=5
after remove:list.size()=0

但實際上結果卻是:

list.size()=5
after remove:list.size()=2

原因如下: List每remove掉一個元素以後,後面的元素都會向前移動 ,此時如果執行i++,則剛剛移過來的元素沒有被讀取。

分析:

  • List中有5條資料,需要迴圈5次,
  • 第一次資料為:1 2 3 4 5
  • 執行完remove(0) 後,資料為 2 3 4 5,i=1
  • 第二次資料為:2 3 4 5
  • 執行完remove(1) 後,資料為 2 4 5,i=2
  • 第三次資料為:2 4 5
  • 執行完remove(2) 後,資料為 2 4,i=3
  • 此時如果加上上面註釋的程式碼 System.out.println(i+" "+list.get(i)+" "); 迴圈第4、5次時就會出現異常

二、解決方法

解決方法1:每移過一次後,再把 i 移回來

for (int i = 0; i < list.size(); i++) {        
  list.remove(i);      
  i--;       
}

解決方法2:先刪除後面的元素

for (int i = list.size()-1; i >= 0; i--) { list.remove(i); }

解決方法3:使用iterator刪除

for(Iterator it = list.iterator();it.hasNext();){       
  it.remove(); 
}

以上就是解決JAVA遍歷List集合時,刪除資料出現的問題的詳細內容,更多關於JAVA遍歷List集合 刪除資料的資料請關注我們其它相關文章!