我有一个我循环的ArrayList,通过一些逻辑我会删除特定索引处的元素。
然而,当我循环Arraylist并在途中删除时,ArrayList大小和特定项目的索引也在变化,导致意外结果。
无论如何要绕过这个?
答案 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
进行循环播放。它可用于从集合中删除元素。