【发布时间】:2014-06-24 00:20:53
【问题描述】:
我读过一篇关于从 this link 中删除集合中元素的文章
根据我的理解,迭代器删除方法可以防止并发修改异常,然后删除 Collection 的方法。但是当我尝试运行下面的代码时,我无法获得 concurrentmoficationexception
List dayList= new ArrayList();
dayList.add("Sunday");
dayList.add("Monday");
dayList.add("Tuesday");
dayList.add("Wednesday");
dayList.remove("Tuesday");
Iterator itr=dayList.iterator();
while(itr.hasNext())
{
Object testList=itr.next();
if(testList.equals("Monday"))
{
dayList.remove(testList);
}
}
System.out.println(dayList);
}
- 根据 javadoc,当我们在迭代期间尝试进行任何修改时,会引发 ConcurrentModicationException。我正在使用集合删除方法,但仍然没有异常。但是如果我评论行 dayList.remove("Tuesday") ;,抛出异常。
谁能解释这段代码背后发生了什么?
【问题讨论】:
-
您的描述不准确。如果您取消注释这两行,您只会得到例外。
-
查看 ConcurrentModificationException 文档:docs.oracle.com/javase/7/docs/api/java/util/…
-
@EJP 即使他将
iterator.remove()行注释掉,再次调用iterator.next()时仍然会出现异常。 -
if(){ } 是你的救星。也许JVM认为dayList.remove(testList);是安全的 :) 。 - “Fail-fast 操作会尽最大努力抛出 ConcurrentModificationException。”
-
我已经编辑了问题的描述。谁能解释一下快速失败的行为。
标签: java collections