解決JAVA遍歷List集合,刪除資料時出現的問題
阿新 • • 發佈:2020-07-16
一、問題描述
有時候,我們會遇到在遍歷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集合 刪除資料的資料請關注我們其它相關文章!