Java的ArrayList数组遍历添加问题解决

最近,在写一个程序时,遇到了ArrayList数组一边遍历和一边添加的操作,由于习惯吧,一开始我就写成了类似于下面的这样(下面代码只是用来说明这种情况):

import java.util.ArrayList;

public class Test {

    public static void main(String[] args){
        ArrayList<String> stringArray = new ArrayList<>();
        stringArray.add("one");
        stringArray.add("two");
        stringArray.add("three");
        stringArray.add("four");
        stringArray.add("five");
        stringArray.add("six");
        stringArray.add("seven");
        stringArray.add("eight");
        stringArray.add("nine");

        /**
         * 一边遍历一边添加
         */
        for (String str : stringArray){
            System.out.println(str);
            stringArray.add("ten");
        }
    }
}

谁知道报错如下:

Exception in thread "main" java.util.ConcurrentModificationException
        at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1009)
        at java.base/java.util.ArrayList$Itr.next(ArrayList.java:963)
        at Test.main(Test.java:20)

编程久了就很快意识到肯定是边遍历边添加出错了,由于我也是刚入门Java不久,就网上搜索一番,发现很多解决的方法:
https://blog.csdn.net/Landon_Xu/article/details/53414971
参考后,我选择不改变数据类型,所以就修改为下面这样:

下面代码会造成 无限循环,代码只供问题说明参考

import java.util.ArrayList;

public class Test {

    public static void main(String[] args){
        ArrayList<String> stringArray = new ArrayList<>();
        stringArray.add("one");
        stringArray.add("two");
        stringArray.add("three");
        stringArray.add("four");
        stringArray.add("five");
        stringArray.add("six");
        stringArray.add("seven");
        stringArray.add("eight");
        stringArray.add("nine");

        /**
         * 一边遍历一边添加
         */
        for (int i = 0; i < stringArray.size(); i++){
            String str = stringArray.get(i);
            System.out.println(str);
            stringArray.add("ten");
        }
    }
}

这样问题就解决了!!

其中的缘由网上有很多解释,在这里我只记录一下这种错误的简单解决方式,作为学习 java 的积累,以后会慢慢深入学习的!!!

发布了176 篇原创文章 · 获赞 46 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43207025/article/details/105210263