我知道有很多与此例外有关的问题。即使我在Getting ConcurrentException when working with list之前也问过这个问题,解决方案是使用ListIterator
而不是迭代器。在我的下面的程序中,我使用了ListIterator
,但我仍然遇到了这个例外。
我真的无法理解为什么会遇到此异常。任何人都可以帮我解决这个问题吗?
public static void main(String args[]) {
List<String> myList = new ArrayList<String>();
myList.add("1");
myList.add("2");
myList.add("3");
myList.add("4");
myList.add("5");
List<String> myList_1 = new ArrayList<String>();
myList_1.add("4");
myList_1.add("6");
ListIterator<String> it = myList.listIterator();
mainLoop:
while(it.hasNext()) {
String internalAperture = it.next();
System.out.println("Aperture:"+internalAperture);
String refreneceNumber = internalAperture;
if (refreneceNumber.equals("6")) {
myList.add("6");
break;
}
else {
ListIterator<String> it_ = myList_1.listIterator();
while(it_.hasNext()) {
String a = it_.next();
myList.add(a);
continue mainLoop;
}
}
}
}
答案 0 :(得分:0)
您得到异常,因为您在迭代时修改了列表。
迭代器允许您这样做的唯一方法是通过迭代器修改列表。
ListIterator
仅允许在其当前位置之后add
元素。您无法添加到列表的末尾。我不知道这对你的算法是否有问题。如果必须添加到最后,请考虑使用for (int i=0; i<list.size(); i++)
循环(这样可以提供更多控制权)。
答案 1 :(得分:0)
如果您想在浏览列表时修改列表,可以使用CopyOnWriteArrayList
代替List
:
CopyOnWriteArrayList<String> myList = new CopyOnWriteArrayList<String>();
在其他情况下,您可以忘记迭代器并使用通常的循环:
for (int i = 0; i < myList.size(); i++) {
String internalAperture = myList.get(i);
//do something
}