刪除List集合數據問題
阿新 • • 發佈:2018-07-29
arr 第一次 二次 iterator print color 代碼 lin bsp
一、問題描述
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();
}
刪除List集合數據問題