我在了解如何避免ConcurrentModificationException异常时,发现了一篇文章。该文章的第一个代码示例与以下代码相似,这会导致该异常:
List<String> myList = new ArrayList<String>();
myList.add("January");
myList.add("February");
myList.add("March");
Iterator<String> it = myList.iterator();
while(it.hasNext())
{
String item = it.next();
if("February".equals(item))
{
myList.remove(item);
}
}
for (String item : myList)
{
System.out.println(item);
}
然后它进一步解释了如何通过各种建议来解决这个问题。
当我试图复现它时,我没有得到异常!为什么我没有得到异常?
ArrayList
迭代器类中的一个错误。 - T.J. CrowderhasNext
不会抛出异常,但也不会返回true
。因此,它解释了行为并回答了问题。 - bikeshedderIterator.next()
没有声明抛出 CME 异常。整个ArrayList
类的 JavaDoc 只是说:_如果在迭代器创建后任何时候以除迭代器自己的 remove 或 add 方法之外的任何方式对列表进行结构修改,则迭代器将抛出 ConcurrentModificationException 异常_,但没有具体指定哪个方法。 - Natix