For Array on ArrayList Exception

时间:2011-09-02 02:01:54

标签: android for-loop arraylist

我为有限的标题道歉,但我不知道如何准确地描述这个问题。我有一个for循环遍历包含对象的arrayList。其中一个对象方法是在不同时间点设置的布尔值。 for循环的要点是遍历arrayList并删除包含boolean的每个项为false。

if(!arrayList.isEmpty()){
   int len = arrayList.size();
   for(int i=0; i<len; i++){
    if(!arrayList.get(i).isStartTimer()){
        arrayList.remove(i);
    }
  }
}

for循环总是在数组中留下太多对象。这是因为每次for循环循环时,由于数组中删除的项目和最后一个对象,len会下降一个,它会在删除对象之前取消for循环。我理解这个问题,但我无法弄清楚如何解决它。我已经尝试过像len + 1这样的东西,但是当我对它做任何事情时它抛出一个indexOutOfBounds异常。有任何想法吗?另外,这是我做我想做的最好的方式吗?

2 个答案:

答案 0 :(得分:2)

你可以切换到:

if( ! arrayList.isEmpty() ){
    int i = 0;
    while( i < arrayList.size() ) {
        if( ! arrayList.get(i).isStartTimer() ){
            arrayList.remove(i); 
            continue; // skip i++
        }
        i++;
    }
}

答案 1 :(得分:1)

你应该向后循环,这样你就不会使用你删除的项目之后的标记。

for (int i = arrayList.size() - 1; i >= 0; i--) {

}

或者,您可以递减i以使用下一个索引,并删除len变量,以便结束条件使用实际长度。