Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ArrayList中删除会产生java.util.ConcurrentModificationException_Java_Android_List_Arraylist - Fatal编程技术网

从ArrayList中删除会产生java.util.ConcurrentModificationException

从ArrayList中删除会产生java.util.ConcurrentModificationException,java,android,list,arraylist,Java,Android,List,Arraylist,在这个android游戏中,我使用ArrayList来跟踪当前屏幕上的所有实体。通过运行列表,我可以成功地更新实体并将其添加到屏幕/列表中,但尝试删除它们会导致java.util.ConcurrentModificationException错误。我是一个新手程序员,所以我真的不知道会出什么问题 我用这个方法来确定当一个实体离开屏幕时,它什么时候需要被删除,但只有通过顶部 private void deleteEntities() { for(Entity ent : entsOnLev

在这个android游戏中,我使用ArrayList来跟踪当前屏幕上的所有实体。通过运行列表,我可以成功地更新实体并将其添加到屏幕/列表中,但尝试删除它们会导致java.util.ConcurrentModificationException错误。我是一个新手程序员,所以我真的不知道会出什么问题

我用这个方法来确定当一个实体离开屏幕时,它什么时候需要被删除,但只有通过顶部

private void deleteEntities() {
    for(Entity ent : entsOnLevel) {
        if((ent.getY() + ent.getImage().getHeight()) < 0) {
            this.entsOnLevel.remove(ent);
        }
    }
}

有人能告诉我出了什么问题吗?

您创建了一个迭代器,并且正在删除他的当前项,因此他找不到下一项


请阅读此处的详细信息->

您应该使用

应该给您一些提示,为什么要使用迭代器。

您面临ConcurrentModificationException,因为您一次在同一个列表上执行两个操作。i、 e同时循环和移除

为了避免这种情况,请使用迭代器,它可以保证安全地从列表中删除元素

例:


看看您可以显式地在迭代器上循环,而不是隐式地使用增强的for循环并调用它。remove。这个答案应该是一个接近重复的答案vote@mirco.widmer同样的例外,不同的原因。这不是重复的问题,谢谢!我知道直接从列表中删除数据肯定有问题!我想我应该去读迭代器,嗯?我应该在我的更新方法中使用类似的方法,还是像我尝试删除方法时那样安全?@JasonJahn这里的一个经验法则是,如果你在循环时修改集合对象,请使用迭代器。它不知道我是否使用了迭代器错误,但使用此方法代替我的旧方法,使用增强的for循环,已停止更新我的实体。在这种情况下,虽然it.hasNext{Entity ent=it.next;ent.update;},但您正在更新实体,而不是集合。因此不要在那里使用迭代器。使用普通的foreach循环并更新您的实体。更新集合意味着从中添加和/删除这很奇怪,因为从集合中删除似乎也不起作用。private void deleteEntities{while it.hasNext{Entity ent=it.next;ifent.getY<800{it.remove;}}}}}我以前从未使用过stackoverflow,是否还有其他地方我应该讨论这个问题?使用迭代器从列表中删除似乎不起作用,即使我在一个方法中使用你的代码,这个方法会不断更新。从不同的线程不断更新,或者只是多次调用?它是在游戏循环中调用的,所以大约每秒调用60次。我找到了答案。我意识到每次我想使用迭代器时我都应该更新它,是吗?
    Iterator<YourDataType> it = YourList.iterator();
    while (it.hasNext()) 
           it.remove();
List<Object> objs;
Iterator<Object> i = objs.iterator();
while (i.hasNext()) {
   Object o = i.next();
  //some condition
    i.remove();
}