当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在使用迭代器时,使用迭代器从ArrayList中删除东西》经验,为你挑选了1个好方法。

我做了一个小游戏,在屏幕上绘制敌人,敌人来自ArrayList.屏幕重新绘制,以便敌人也可以移动.我这个代码执行此操作:

for (Meteor m : getMeteorArrayList()) {
    if (m.getVisible())
    {
        canvas.drawBitmap(m.getImg(), m.getX(), m.getY(), p);
    }
    else
    {
        Iterator 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中删除一些东西,然后仍然可以访问其余的东西?



1> Eran..:

你的问题是你在列表上迭代两次 - 一次隐式(使用增强的for循环),第二次使用显式迭代器.如果只使用显式迭代器,则可以从列表中删除该元素.

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

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有