遍历集合以添加项目但抛出 ConcurrentModificationException
Iterating through collections to add items but throwing ConcurrentModificationException
package com.ripal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class Outputs {
public void show() {
final ArrayList<String> list = new ArrayList<String>();
list.add("banana");
list.add("apple");
Iterator<String> itr = list.iterator();
Collections.sort(list);
while (itr.hasNext()) {
System.out.println(itr.next() + " ");
}
}
}
class Test {
public static void main(String[] args) {
Outputs outputs = new Outputs();
outputs.show();
}
}
ArrayList
有一个快速失败的迭代器。您只能通过迭代器修改集合。在调用迭代器方法并抛出 ConcurrentModificationException
之后,会很快检测到在外部进行的任何其他修改。在您的情况下,在创建迭代器后,您可以对数组进行就地排序,并且排序例程会修改数组的内容,从而导致 ConcurrentModificationException
使用迭代器。要解决此问题,只需在创建迭代器之前执行排序即可。这是它的样子。
Collections.sort(list);
Iterator<String> itr = list.iterator();
package com.ripal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class Outputs {
public void show() {
final ArrayList<String> list = new ArrayList<String>();
list.add("banana");
list.add("apple");
Iterator<String> itr = list.iterator();
Collections.sort(list);
while (itr.hasNext()) {
System.out.println(itr.next() + " ");
}
}
}
class Test {
public static void main(String[] args) {
Outputs outputs = new Outputs();
outputs.show();
}
}
ArrayList
有一个快速失败的迭代器。您只能通过迭代器修改集合。在调用迭代器方法并抛出 ConcurrentModificationException
之后,会很快检测到在外部进行的任何其他修改。在您的情况下,在创建迭代器后,您可以对数组进行就地排序,并且排序例程会修改数组的内容,从而导致 ConcurrentModificationException
使用迭代器。要解决此问题,只需在创建迭代器之前执行排序即可。这是它的样子。
Collections.sort(list);
Iterator<String> itr = list.iterator();