从ArrayList中删除多个项目,转移索引

时间:2012-02-06 13:47:39

标签: java

我有一个我循环的ArrayList,通过一些逻辑我会删除特定索引处的元素。

然而,当我循环Arraylist并在途中删除时,ArrayList大小和特定项目的索引也在变化,导致意外结果。

无论如何要绕过这个?

4 个答案:

答案 0 :(得分:10)

以下是迭代器方法的代码 - 替换您自己的条件并添加泛型类型<>根据需要:

Iterator it = list.iterator(); 
while(it.hasNext()){
    Object o = it.next();
    if(someCondition(o)){
        it.remove();
    }
}

而且,正如JohnB在评论中所说,如果从大型列表中删除大量项目,ArrayList效率不高......

答案 1 :(得分:4)

您可以使用Iterator.remove()或向后迭代。

List<String> list = ...
for(int i= list.size()-1; i>=0; i--)
   if(test(list.get(i)))
      list.remove(i); // values before `i` are untouched.

或者你可以递减计数器。

List<String> list = ...
for(int i= 0; i < list.size(); i++)
   if(test(list.get(i)))
      list.remove(i--); // move i back as there is one less element.

答案 2 :(得分:3)

您可以使用具有remove()方法的迭代器来完成该操作。

答案 3 :(得分:1)

使用Iterator进行循环播放。它可用于从集合中删除元素。