Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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 对象ArrayList的并发修改错误_Java_Concurrentmodification - Fatal编程技术网

Java 对象ArrayList的并发修改错误

Java 对象ArrayList的并发修改错误,java,concurrentmodification,Java,Concurrentmodification,我一直在寻找我的问题的答案,但什么也没用。 这是我的密码 public ArrayList<Exercise> checkList() { Criteria a = this.getCriteria(); ArrayList<Exercise> z = this.getExercise(); for(Exercise c : z) { if(!compareSkillLevel(c,a)|| !compareEquipmen

我一直在寻找我的问题的答案,但什么也没用。 这是我的密码

public ArrayList<Exercise> checkList()
{
    Criteria a = this.getCriteria();
    ArrayList<Exercise> z = this.getExercise();
    for(Exercise c : z)
    {
        if(!compareSkillLevel(c,a)|| !compareEquipment(c)|| !compareFocus(c)
                || !compareTraining(c))
            z.remove(c);
    }
    return z; 

}

如何解决此问题?

在迭代时删除,这会导致此异常。
要解决此问题,请使用
迭代器
(ListIterator)
并调用
Iterator.remove()

for(Iterator it=z.Iterator();it.hasNext();){
练习e=it.next();
如果(条件){
z、 删除();
}
}

正如其他答案所指出的,这里的问题是,在迭代列表时,试图从列表中删除。这在java中是不允许的,除非您使用迭代器的remove方法删除元素。这意味着您有两种方法来修复此代码

1:

for(迭代器迭代器=z.Iterator();迭代器.hasNext();)
{
练习c=迭代器.next();
如果(!compareSkillLevel(c,a)| |!compareEquipment(c)| |!compareFocus(c)
||!比较训练(c))
iterator.remove();
}
或者,您可以使用数组列表的索引在其上循环,并执行以下操作

2:

for(int i=0;i

请注意此处的
i--
,这是必要的,因为从
ArrayList
中删除元素的操作会转移现有元素,这意味着您要检查的下一个元素将取代上一个元素。

请问如何解决此问题?请在提出新问题之前搜索StackOverflow。只需搜索
ConcurrentModificationException
就会得到很多结果。这解决了我的问题,谢谢
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at randomworkout.List.checkList(List.java:161)
at Main.main(Main.java:46)
for (Iterator<Excercise> it = z.iterator(); it.hasNext();) {
   Excercise e = it.next();
   if (condition) {
      z.remove();
   }
}
for(Iterator<Exercise> iterator = z.iterator(); iterator.hasNext();)
{
    Exercise c = iterator.next();
    if(!compareSkillLevel(c,a)|| !compareEquipment(c)|| !compareFocus(c)
            || !compareTraining(c))
        iterator.remove();
}
for(int i = 0;i < z.size(); i++)
{
    Exercise c = z.get(i);
    if(!compareSkillLevel(c,a)|| !compareEquipment(c)|| !compareFocus(c)
            || !compareTraining(c))
        z.remove(i--)
}