我正在为我的大学类(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/