从 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();
}
我知道如何使用 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();
}