首页 > 解决方案 > ListIterator 在线程“主”java.util.ConcurrentModificationException 中抛出“异常”Java

问题描述

我在网上搜索了一下,但要么解释太过分了,要么人们实际上建议使用 ArrayList 来避免异常。所以我现在有点无助。这是我的代码:

import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Scanner;

public class ArrayIterator {

    static Scanner scan = new Scanner(System.in);
    static ArrayList<String> simpleList = new ArrayList<>();
    static ListIterator<String> simpleIterator = simpleList.listIterator(0);
    static int b = 5;

    public static void main(String[] args) {

        getInput();
        spellOutput();

    }
    private static void getInput(){
        System.out.println("What do you want to add to your list? You can name five items");
        for (int i = 0; i < b; i++) {
            String m = scan.nextLine();
            simpleList.add(m);
        }
    }
    private static void spellOutput(){
        System.out.println("Here are the items from your list: ");
        do{
            System.out.println(simpleIterator.next());
        }while(simpleIterator.hasNext());
    }
}

该方法似乎一切正常getInput,我可以通过System.out.println();. 但是,当我使用该spellOut方法时,事情会向南,我得到以下异常:

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 ArrayIterator.spellOutput(ArrayIterator.java:28)
    at ArrayIterator.main(ArrayIterator.java:15)

任何帮助将不胜感激 :)

标签: javaexceptionarraylistdo-while

解决方案


  1. 您创建了迭代器。
  2. 您修改了列表。
  3. 您使用了迭代器。

这就是引发并发异常的原因。为避免引发异常,您应该仅使用迭代器将项目添加到列表中:

simpleIterator.add(m)

推荐阅读