Java ConcurrentModificationException在不应该抛出时抛出
你知道为什么吗Java ConcurrentModificationException在不应该抛出时抛出,java,Java,你知道为什么吗 lines = newRemainingLines.size(); 会抛出此异常吗 lines 是一个用来存储ArrayList大小的int newRemainingLines(); 我意识到这可能不足以给出一个明确的答案,但也许解释一下应该寻找什么会有所帮助。老实说,我不知道这段代码是如何同时修改这个int的 int i = 0; POLines.clear(); itemLines.clear(); lines = newLines.size()
lines = newRemainingLines.size();
会抛出此异常吗
lines
是一个用来存储ArrayList大小的int
newRemainingLines();
我意识到这可能不足以给出一个明确的答案,但也许解释一下应该寻找什么会有所帮助。老实说,我不知道这段代码是如何同时修改这个int的
int i = 0;
POLines.clear();
itemLines.clear();
lines = newLines.size();
//POLines should contain only lines not relating to items
while(!newLines.get(i).equals(ITEMSTART) && i < lines){
POLines.add(newLines.get(i));
i++;
}
List<String> newRemainingLines = newLines.subList(i + 1, lines);
newLines.clear();
i = 0;
lines = newRemainingLines.size();
//itemLines should contain lines only relating to items
while(!newRemainingLines.get(i).equals(POEND) && i < lines){
itemLines.add(newRemainingLines.get(i));
i++;
}
List<String> finalRemainingLines = newRemainingLines.subList(i + 1, lines);
i = 0;
lines = finalRemainingLines.size();
while(i < lines){
newLines.add(finalRemainingLines.get(i));
i++;
}
tempOrder = POF.createPurchaseOrder(POLines,itemLines);
_orders.add(tempOrder);
inti=0;
POLines.clear();
itemLines.clear();
lines=换行符。size();
//POLINE应仅包含与项目无关的行
而(!newLines.get(i).equals(ITEMSTART)&&i
这将出现在具有类似代码段的for循环中的if-else语句中。这是最后一个,但只有这个抛出异常。
子列表
返回基础列表的视图。它不是复制品
引述:
返回的列表由该列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然
如果支持列表(即,此列表)以任何方式(而不是通过返回的列表)进行结构修改,则此方法返回的列表的语义将变得未定义
语句newLines.clear()
在结构上修改了支持列表,因此随后调用newRemainingLines.size()
时表示不行,又名ConcurrentModificationException
要创建副本,请使用:
List<String> finalRemainingLines = new ArrayList<>(newRemainingLines.subList(i + 1, lines));
List finalRemainingLines=newarraylist(newRemainingLines.subList(i+1,行));
请发布完整的代码,并从引发异常的位置发布正确的行size()
方法调用永远不会引发该异常。我可以向您保证,此行正在引发该异常。什么类型的newRemainingLines
?提示:它不是ArrayList
@Andreas Right,对不起,它只是一个列表。有什么我看不到的吗?@CreasyBear,如果你只是把堆栈跟踪。。。它将清楚地显示导致异常的方法调用…好的,非常感谢。我不知道子列表只返回了一个视图。即使您没有阅读全部内容,前三个词也是:“返回视图”。不能错过!