微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 为什么对foreach方法进行并发修改而不对for循环进行修改

 ArrayList

我得到一个concurrentModificationException,但正常的for循环.我没有任何例外.
在正常的forloop像: –

for(int i=0;istem.out.println(target.get(i));
   target.add(22); //no exception
   target.remove(2) // no exception 
}
最佳答案
ForEach循环不会直接在您的集合上循环.它使用了你的集合的迭代器.您可以在集合实现中看到迭代器.

Arraylist source code

735 
736     public Iteratorterator() {
737         return new Itr();
738     }


An optimized version of AbstractList.Itr
742 
743     private class More ...Itr implements Iterator

你的foreach循环等于

for(Iteratorterator(); i.hasNext(); ) {
  Integer element = i.next();
  //To do
}

因此,如果您在此处执行任何操作,并且同时修改集合,则引擎盖下的迭代器会出现混淆并引发异常.

JLS开始

List

将被翻译为:

for (Iteratorterator(); #i.hasNext(); ) {
    float #i0 = (Integer)#i.next();
    ...

原文地址:https://www.jb51.cc/java/437426.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐