Java:从不同的ArrayLists同时删除两个对象

虫族

我有对象Bullet,我同时将它们添加到两个ArrayList中,下面简要介绍了这些列表。完成某些操作后,我希望从两个列表中删除一个项目符号。这种方法正确吗?我不断收到错误:java.util.ConcurrentModificationException

或者,您是否可以想到以这种方式处理对象的方法比ArrayList更好的解决方案?

    //there are ArrayList<Bullet> bullets and ArrayList<Updatable> updatable, in the class

    public void removeBullet(Bullet bullet) {

    for (ListIterator<Bullet> bulletIterator = bullets.listIterator(); bulletIterator.hasNext();) {

        Bullet tempBullet = bulletIterator.next();

        if (tempBullet.equals(bullet)) {

            for (ListIterator<Updatable> updatableIterator = updatable.listIterator(); updatableIterator.hasNext();) {

                Updatable tempUpdatable = updatableIterator.next();
                if (tempUpdatable.equals(bullet)) {

                    updatableIterator.remove();
                    bulletIterator.remove();
                    return;

                }
            }
        }
    }

}

编辑:问题的根源是我在列表中的一个上使用了一个迭代器,恰好同时在另一个地方,因此出现了错误。对于可更新列表,此代码工作正常。

导航系统

发生ConcurrentModificationException的原因是,您试图从Iterator中删除项目符号,而您同时也在for循环中迭代该项目符号;java不喜欢您执行此操作,并且会引发异常。

为了解决这个问题,您将必须遍历两个Iterators并分别将其删除,或者如rdonuk所述,只需使用ArrayListremove()方法,如果您尝试删除ArrayList中没有的内容,该方法将不会引发任何异常。true如果对象被删除,它将返回false否则,您甚至不必首先检查要删除的对象是否包含在ArrayList中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从不同的模块导入两个不同的东西?

同时循环两个不同的数组

同时使用两个不同的网络

两个arrayLists,每个对象都有自己的List

从不同的导入创建相同类的两个对象使它们看起来像不同的类

同时缩放两个游戏对象

两个不同的Java对象的“左连接”

如何从不同目录导入两个文件?

从不同的表中减去两个值

当两个值的值不同时如何从数组中删除数组值

如何在删除重复项的同时合并具有不同列号的两个表?

Java。如何从两个列表中删除重复的对象

PHP:比较两个具有不同时区的DateTime对象

同时将流中的对象添加到两个不同的列表中

比较具有不同时区的两个“时间”对象

检查模型与两个不同对象之间是否同时发生碰撞

如何比较两个 JArray 对象之间的项目并仅在它们不同时调用方法

比较Vue中两个不同的数据对象同时减少

删除多对多的条目,同时保持在数据库中的两个对象

如何使用 Arraylist 中的命令行同时删除两个对象

在两个ArrayLists中排序和交换元素(Java)

以不同的形式同时显示两个不同的网格

使用删除功能同时删除两个li

转换两个不同的对象数组

两个不同对象的总和

Python给我两个不同的结果,同时对相同的对象执行两次相同的操作

Java Spring:如何同时运行两个不同的cronjob?

如何在OS-X上同时运行两个不同版本的Java?

具有不同时区的两个Java日期之间经过的天数