java - for循环与并发修改异常中增强for循环的比较

标签 java java.util.concurrent

我正在阅读有关并发修改异常的文章,并注意到在使用增强的 for 循环删除元素的情况下会抛出并发修改异常,而普通的 for 循环则不会。 有人可以帮我理解为什么会这样吗,在代码下面

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循环可以取消注释

最佳答案

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

关于java - for循环与并发修改异常中增强for循环的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54122420/

相关文章:

Java MySQL 不连接到其他服务器

java - 如何编写一个高效的 JPQL 查询来返回表中链接记录的列表?

java - 如何在 IntelliJ IDEA 中为 Spring Boot 项目构建 jar Artifact

java - Java 中的 ConcurrentHashMap 锁定机制用于 computeIfPresent

java - 如何使用 ReentrantReadWriteLock 等待数据?

java - Java Lock 是否有超时的实现

java - 为什么有两个带有 Google Guice 依赖注入(inject)框架的单例实例

Java - 将等待/通知转换为 java.util.concurrent

java - 如何检测线程正在等待原子引用

java - 单击时更改按钮背景