Java 从ArrayList中删除多个项,移动索引

Java 从ArrayList中删除多个项,移动索引,java,Java,我有一个循环的ArrayList,通过一些逻辑,我将删除特定索引处的元素 然而,当我循环Arraylist并在途中删除时,Arraylist的大小和特定项的索引也在更改,从而导致意外的结果 无论如何,要避免这种情况?您可以使用具有remove()方法的迭代器来完成此操作。使用迭代器进行循环。它可用于从集合中删除元素。以下是迭代器方法的代码-替换您自己的条件并根据需要添加泛型类型: Iterator it = list.iterator(); while(it.hasNext()){ O

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

然而,当我循环Arraylist并在途中删除时,Arraylist的大小和特定项的索引也在更改,从而导致意外的结果


无论如何,要避免这种情况?

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

使用
迭代器进行循环。它可用于从集合中删除元素。

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

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

而且,正如JohnB在评论中所说,如果要从大型列表中删除大量项,ArrayList的效率不是很高。

您可以使用迭代器。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=。。。
对于(int i=list.size()-1;i>=0;i--)
if(test(list.get(i)))
列表。删除(i);//在'i'之前的值是不变的。
或者你可以减少计数器的数值

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.
List=。。。
对于(int i=0;i
您可能会收到一个
ConcurrentModificationException
。这就是使用
迭代器的全部内容。此外,考虑使用<代码>链接目录> /COD>而不是<代码> ARAYLISTAB/COD> >如果要定期从List.Fy的中间删除元素,下一次,如果你说“意外结果”是什么,你的问题会更清楚。i、 e.“我收到ConcurrentModificationException”