我正在为我的大学类(class)使用一些代码,并从

public boolean removeStudent(String studentName)
{
    int index = 0;
    for (Student student : students)
    {
        if (studentName.equalsIgnoreCasee(student.getName()))
        {
            students.remove(index);
            return true;
        }
        index++;
    }
    return false;
}

至:
public void removeStudent(String studentName) throws StudentNotFoundException
{
    int index = 0;
    for (Student student : students)
    {
        if (studentName.equalsIgnoreCase(student.getName()))
        {
            students.remove(index);
        }
        index++;
    }
    throw new  StudentNotFoundException( "No such student " + studentName);
}

但是新方法不断给出并发修改错误。我该如何解决这个问题,为什么会发生呢?

最佳答案

这是因为您在执行remove()之后继续遍历列表。
您正在同时读取和写入列表,这破坏了foreach循环基础上的迭代器的协定。
使用Iterator.remove()

for(Iterator<Student> iter = students.iterator(); iter.hasNext(); ) {
    Student student = iter.next();
    if(studentName.equalsIgnoreCase(student.getName()) {
        iter.remove();
    }
}
描述如下:

您可以使用Iterator.hasNext()来检查是否存在下一个元素。

关于Java并发修改异常错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15384486/

10-10 07:56