一、源程式
string str1 =
newstring("1");
string str2 =
newstring("2");
string str3 =
newstring("3");
string str4 =
newstring("4");
string str5 =
newstring("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++)
system.out.println("after remove:list.size()="
+list
.size());
本來預期結果應該是:
after remove:list.size()=0
但實際上結果卻是:
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
3 < list.size()=2 迴圈結束
三、解決方案
解決方法1:每移過一次後,再把 i 移回來
for (int i = 0; i
< list.
size(); i++)
解決方法2:先刪除後面的元素
for (int i = list.
size()-1; i >= 0; i--)
iterator it = list.iterator();
while(it.hasnext())
關於List的remove 方法
最近遇到乙個小問題,我將其簡化為下列 list的remove 方法在下列顏色注重的 執行的原始碼也是不同的 listlist new arraylist list.add 11 list.add 12 list.add 13 list.add 14 list.add 15 list.add 16 f...
Java中List的remove方法
今天被問到乙個問題 numberlist是乙個儲存數字的容器,以下 執行後容器中的數字是什麼?listnumberlist new arraylist 5 numberlist.add 2 numberlist.add 4 numberlist.add 1 numberlist.add 3 numb...
JAVA 使用List中的remove方法遇到的坑
一 問題描述 有個需求是從list過濾掉金額小於0.01的資料,看起來很簡單,我卻搞了半天,沒次資料都沒刪除乾淨,都會有四五條沒刪除。二 解決方法 測試了半天,發現for迴圈寫錯了,剛開始是這樣寫的 for int i 0 i psychologistresponselist.size i debu...