首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环比较在并发修改异常中增强的for循环

for循环比较在并发修改异常中增强的for循环
EN

Stack Overflow用户
提问于 2019-01-10 13:29:36
回答 2查看 237关注 0票数 0

我正在阅读关于并发修改异常的文章,并注意到在使用增强的for循环抛出并发修改异常的情况下删除元素的情况下,而普通的for循环不会抛出并发修改异常。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

public class ConcurrentModificationExceptionExample {

    public static void main(String args[]) {
        List<String> myList = new ArrayList<String>();

        myList.add("1");
        myList.add("2");
        myList.add("3");
        myList.add("4");
        myList.add("5");

        // enhanced for loop
/*     for(String s:myList){
         if(s.equals("1")){
             myList.remove("1");
         }
     }*/
// normal for loop
        for(int i = 0; i<myList.size(); i++){
            if(myList.get(i).equals("1")){
                myList.remove("1");
            }
        }

        System.out.println(myList);


    }
}

for testing //enhanced for循环可以取消注释

EN

回答 2

Stack Overflow用户

发布于 2019-01-10 13:33:19

这是因为在您的“普通for循环”代码中没有涉及到Iterator。相反,您可以使用get单独访问这些元素。

票数 2
EN

Stack Overflow用户

发布于 2019-01-10 13:33:59

循环表示法

代码语言:javascript
复制
for (String s: myList) {
    ...
}

在后台创建迭代器对象。迭代器跟踪集合的修改。当你不使用迭代器进行修改时,你会得到一个ConcurrentModificationException。

在使用时

代码语言:javascript
复制
for (int i = 0; i < myList.size(); i++) {
    ...
}

,并使用

代码语言:javascript
复制
myList.get(i)

没有创建迭代器,因此没有抛出异常的机会。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54122420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档