Java 从(粒子p:粒子)循环的ArrayList内部移除元素

Java 从(粒子p:粒子)循环的ArrayList内部移除元素,java,arrays,for-loop,processing,Java,Arrays,For Loop,Processing,我知道如何在for循环中使用remove()函数删除元素,方法如下: // ArrayList<Particle> particles; for(int = 0; i < particles.size(); i++){ if(condition){ particles.remove(i) } } //阵列列表粒子; 对于(int=0;icondition)。这将移除所有元素。OP的第一个示例只删除所有其他元素。@azu

我知道如何在for循环中使用remove()函数删除元素,方法如下:

 // ArrayList<Particle> particles;

    for(int = 0; i < particles.size(); i++){
     if(condition){
     particles.remove(i)
     }    
    }
//阵列列表粒子;
对于(int=0;i
但我想知道如何使用我觉得更优雅的for循环语法来做同样的事情:

// ArrayList<Particle> particles;

for(Particle p:particles){
 if(condition){
// remove particle
 }
}
//阵列列表粒子;
对于(粒子p:粒子){
如果(条件){
//去除颗粒
}
}

您不能这样做,因为您将得到ConcurrentModificationException。ConcurrentModificationException在您迭代的内容被修改时抛出

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

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

使用迭代器类:

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

这回答了你的问题吗<代码>粒子=新的ArrayList()
粒子。清除()总是有
粒子。移除(p->condition)
。这将移除所有元素。OP的第一个示例只删除所有其他元素。@azurefrog怎么会这样?他每增加一次迭代器整数,时间列表与数组不同。当您删除元素0时,其余元素将被“重新索引”下来,因此删除0、1、2将删除原来的第0、第2和第4个元素。@azurefrog哦,我明白了。我忽略了这一点。嗯,公平地说,有可能OP也忽略了…;-)这一切都可以正常工作,但当我尝试使用Particle Particle=iterator.next()时,我发现类型不匹配“java.lang.Object”与“Particle”不匹配;你知道我怎么解决这个问题吗?next()不应该遍历我的对象数组吗?