在使用迭代器时,使用迭代器从ArrayList中删除东西

时间:2015-12-02 08:07:08

标签: java android arraylist iterator

我制作了一个在屏幕上绘制敌人的小游戏,敌人来自ArrayList。屏幕重新绘制,以便敌人也可以移动。我用这段代码做到了这一点:

for (Meteor m : getMeteorArrayList()) {
    if (m.getVisible())
    {
        canvas.drawBitmap(m.getImg(), m.getX(), m.getY(), p);
    }
    else
    {
        Iterator<Meteor> iter = getMeteorArrayList().iterator();
        while (iter.hasNext())
        {
            if (iter.next() == m)
            {
                iter.remove();
            }
        }

    }

}

但是这给了一个问题。如果我杀死敌人,我希望它从ArrayList中删除。我知道我可以将它设置为NULL但它仍然存在。我在上面的代码中可以看到Iterator

问题在于,如果在我移除敌人后重新绘制屏幕,​​则应用程序会因此错误而崩溃:

java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)

我认为这是因为我突然在敌人所在地的ArrayList上有一个洞。 我怎样才能这样做,以便我可以从ArrayList中删除一些内容并仍然访问其余部分?

2 个答案:

答案 0 :(得分:5)

你的问题是你在列表上迭代两次 - 一次隐式(使用增强的for循环),第二次使用显式迭代器。如果您只使用显式迭代器,那么您将能够从列表中删除该元素。

sudo easy_install -U livestreamer

答案 1 :(得分:1)

我只使用迭代器

Iterator<Meteor> iter = getMeteorArrayList().iterator();
while (iter.hasNext()) {
    Metor m = iter.next();
    if (m.getVisible()) {

    } else {

    }
}

异常可能是因为您在同一个列表上重复两次