将元素添加到ArrayList中时的ConcurrentModification

时间:2018-05-07 20:42:18

标签: java arraylist iterator concurrentmodification

我是Java的初学者,我遇到一个任务问题 我试图向ArrayList添加一个元素但是有一个例外:线程中的异常" main" java.util.ConcurrentModificationException

    public Anagrams (String path) throws FileNotFoundException {
    List<String> tmpList = new ArrayList<>();

    Scanner scan = new Scanner(new File(path));
    while(scan.hasNext()) {
      tmpList.add(scan.next());
    }
    scan.close();

    tmpList.forEach(word -> {
        if(anList.isEmpty()) {
            ArrayList<String> tmp1 = new ArrayList<String>();
            tmp1.add(word);
            anList.add(tmp1);
        } 
        else {
            anList.forEach(list -> {
                if (isAnagram(word, list.get(0))) {
                    list.add(word);
                } else {
                    ArrayList<String> tmp2 = new ArrayList<String>();
                    tmp2.add(word);
                    anList.add(tmp2);
                }
            });
        }
    });

}

我从txt文件中收集单词并将它们分成不同的数组(如果它们是字谜或不是字谜)。我知道在我迭代它的时候我无法修改一个集合 - 但我无法弄清楚如何避免这种异常..请你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

anList.forEach(list -> {
            if (isAnagram(word, list.get(0))) {
                list.add(word);
            } else {
                ArrayList<String> tmp2 = new ArrayList<String>();
                tmp2.add(word);
                anList.add(tmp2); // !!
            }
        });

您认为forEach来电会在评论anList的行中添加添加到// !!的元素吗?

Java不知道它是否应该。所以它会抛出。

弄清楚如何做一些不同的事情:例如,添加到不同的列表中。