2014-10-19 41 views
0

我有一個for循環循環遍歷arrayList中的每個元素對它們執行someMethod(),這取決於該方法的結果,我要麼保留或從名單。例如:java - 在arraylist中引用元素,同時刪除一些

int returnResult; 
for (int i=0;i<4;i++){ 
    returnResult = someMethod(arrayList.get(i)); 
    if (returnResult == -1){ 
     arrayList.remove(i); 
    } 
} 

我的問題是;如果我有5個元素在列表中,並通過循環的第二次迭代(所以當我= 1),我刪除該元素,當我通過第三次迭代將arrayList.get(2)引用實際上是什麼第四元素?即它是否立即減少堆棧大小?

+0

是的,它減少了大小,當你調用'刪除(...)'方法。你的程序會意外結束,但實際上這是預期的結果。 – afzalex 2014-10-19 23:04:27

+0

真棒謝謝你,你知道這是否有辦法嗎? – JabbaWook 2014-10-19 23:06:44

+2

這將是很好,如果有像每個常見的方法文檔......哦,這裏是:http://docs.oracle.com/javase/7/docs/api/java/util/List.html #remove(INT) – Tom 2014-10-19 23:07:29

回答

3

是的,它的確如此。爲了解決這個問題,你可以反過來遍歷數組。

int returnResult; 
for (int i=3;i>=0;i--){ 
    returnResult = someMethod(arrayList.get(i)); 
    if (returnResult == -1){ 
     arrayList.remove(i); 
    } 
} 

這會從最後彈出它們,並且不會影響剩下要通過的元素。

0

這種替換代碼:

int returnResult, limit = 4; 
for (int i=0; i < limit; i++){ 
    returnResult = someMethod(arrayList.get(i)); 
    if (returnResult == -1){ 
     arrayList.remove(i); 
     limit--; 
    } 
}