我已经在网上进行了一些搜索,但是要么解释太过头,要么人们实际上建议使用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();
轻松输出ArrayList。但是,当我使用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)
任何帮助将不胜感激:)
问题是迭代器是在调用getInput()之前创建的。
这里迭代器是从一个空列表创建的。禁止在迭代(搜索快速失败迭代器)时在结构上修改(添加或删除元素)集合。
解决方案-将迭代器的创建移至spellOutput()。
这就是引发并发异常的原因。为了避免引发异常,您应该使用迭代器将项目添加到列表中,如下所示:
simpleIterator.add(m)