从 for(Particle p: particles) 循环中的 ArrayList 中删除元素

remove element from ArrayList inside for(Particle p: particles) loop

我知道如何使用 for 循环中的 remove() 函数删除元素:

 // ArrayList<Particle> particles;

    for(int = 0; i < particles.size(); i++){
     if(condition){
     particles.remove(i)
     }    
    }

但我想知道如何使用我认为更优雅的替代循环语法来做同样的事情:

// ArrayList<Particle> particles;

for(Particle p:particles){
 if(condition){
// remove particle
 }
}

你不能那样做,因为你会得到一个 ConcurrentModificationException。 ConcurrentModificationException 在您迭代的内容被修改时抛出。

您需要创建一个迭代器并使用它来删除您的元素。这是一个例子:

Iterator iterator = particles.iterator();
while(iterator.hasNext()) {
    iterator.remove();
    iterator.next();
}

使用迭代器class :

Iterator iterator = particles.iterator();
    while(iterator.hasNext()) {
    iterator.remove();
    iterator.next();
}