2014-10-19 65 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--; 
    } 
}