【发布时间】:2016-01-05 13:47:33
【问题描述】:
好的,所以在我的类项目中,我正在查看我的类“Sprite”的 ArrayList,并带有增强的 for 循环,我偶尔需要删除我正在查看的 Sprite。我被告知我可以使用迭代器安全地执行此操作(即不删除我当前正在查看的 Sprite)。我在 Oracle 的 java 文档上查了一下,但我不是很明白..
这是我的方法:
public void forward() {
for (Sprite s : sprites) {
s.move();
for(Sprite x : sprites){
if(s!=x && s.overlaps(x)){
if(s instanceof Razorback && x instanceof Opponent){
x.hit();
}
if(x instanceof Razorback && s instanceof Opponent){
s.hit();
}
}
}
if(s.shouldRemove())
sprites.remove(s);
}
}
if(s.shouldRemove()) 是我需要实现迭代器的地方。如果 shouldRemove() 返回 true,则需要从 ArrayList 中删除 s。
【问题讨论】:
-
很确定你不能,因为你需要调用
Iteratorsremove方法 -
您需要更旧的 for 循环才能安全地删除项目。外部 for 循环必须从最大长度开始,例如
for(int i = sprites.size(); i >= 0; i--)。否则,可能是ConcurrentModificationException的原因。内循环没问题。
标签: java loops for-loop iterator