Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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
Java 在LinkedList上迭代时的ConcurrentModificationException_Java_Android - Fatal编程技术网

Java 在LinkedList上迭代时的ConcurrentModificationException

Java 在LinkedList上迭代时的ConcurrentModificationException,java,android,Java,Android,我不确定为什么我的代码的这一部分会导致错误,但我知道如果我从列表中删除一个项目,并且我只是在重复它的同时得到了这个异常。我读到同步是另一个想法,但它并不总是正确的方法。LogCat显示while(sw.hasNext())行的ConcurrentModificationException。请注意,我的代码的其他部分对列表没有任何影响 Iterator<Weapons> sw = Selected_Weapons.iterator(); while (s

我不确定为什么我的代码的这一部分会导致错误,但我知道如果我从列表中删除一个项目,并且我只是在重复它的同时得到了这个异常。我读到同步是另一个想法,但它并不总是正确的方法。LogCat显示
while(sw.hasNext())
行的ConcurrentModificationException。请注意,我的代码的其他部分对列表没有任何影响

Iterator<Weapons> sw = Selected_Weapons.iterator();
                while (sw.hasNext()) {
                    Weapons www = sw.next();
                        if (www.getY()<648){

                            Iterator<Container> cit2 = Containers.iterator();
                            while (cit2.hasNext()) {
                                Container c = cit2.next();

                                if (c.getWeaponID()==www.id){
                                    c.setWeaponID(-1);
                                    c.setIsEmpty(true);
                                    Selected_Weapons.remove(www);
                                }
                            }
                        }
                }
Iterator sw=Selected_.Iterator();
while(sw.hasNext()){
武器www=sw.next();

如果(www.getY()您在对选定的_武器集合进行迭代时对其进行了修改,则有问题的行实际上是:

Selected_Weapons.remove(www);

在这种情况下,您可能希望迭代该集合,并在迭代所有项目后跟踪要删除的项目。

您在迭代选定的集合时正在修改该集合。有问题的行实际上是:

Selected_Weapons.remove(www);

在这种情况下,您可能希望遍历集合,并在遍历所有项后跟踪要删除的项。

使用ConcurrentLinkedList怎么样?

使用ConcurrentLinkedList怎么样?

或者更好,调用
Iterator.remove()
。那么你就不需要单独的集合了。我不知道在你写评论时如何接受答案,但我至少会接受5次。这是一个非常好的棘手的解决方案!谢谢!因为它今天出现了100次错误中的1次。我应该将sw.remove();放在所选的_.remove(www)之前吗?或者更好的是,调用
Iterator.remove()
。那么你不需要单独的收集。我不知道如何接受你在评论中写下的答案,但我至少会接受5次。这是一个非常好的棘手的解决方案!谢谢!因为它今天出现了100次错误中的1次。我是否应该在所选的武器之前放置sw.remove();remove(www)?