ArrayListをトラバースするように設定し、要素を追加してエラーを報告します
ケース:セットを作成し、「曹操」と「貂蝉」の2つの要素を保存し、セットをトラバースします。トラバースした要素が貂蝉の場合は、セットに「呂布」を追加します。
コード:
ArrayList<Object> list = new ArrayList<>();
list.add("曹操");
list.add("貂蝉");
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("貂蝉")){
list.add("吕布");
}
System.out.println(list.get(i));
}
//增强for循环遍历
for (Object o:list){
System.out.println(o);
if (o.equals("貂蝉")){
list.add(1,"吕布");
}
}
Iterator it= list.iterator();
while (it.hasNext()){
if (it.equals("貂蝉")){
list.add("吕布");
}
System.out.println(it.next());
}
それは実行していたとき、しかし、我々はjava.util.ConcurrentModificationExceptionがのエラーが報告されたことがわかりました。
私たちは、CRTLを押しながらIteatorを入力します。それを選択した後、メニューに移動して型階層を使用する
ため、変更の数でコレクションが増加し、イテレータ変更の数が変更に従わない場合、エラーが報告されます。
要素を変更しても、コレクション内の変更の数は自動的に増加しません。これは、イテレーターの変更の数と同じであるため、エラーは報告されません。同様に、要素を削除すると、コレクション内の変更の数も変更されるため、エラーが報告されます。