我有兩個ArrayLists,每個都保存一定大小的塊:blockList,eraserList。塊是具有兩個字段的對象:開始和結束。我需要從另一組塊中減去一組塊。ListIterator和併發修改異常的問題
我必須通過eraserList並從塊列表中「擦除」它們重疊的blockList。因此,我的代碼如下所示:
void eraseBlocks (Arrylist<Blocks> blockList, ArrayList<Blocks> eraserList) {
ListIterator<Blocks> it = blockList.listIterator();
for (Blocks eraser: eraserList) {
while (it.hasNext()) {
Blocks block= it.next();
if ((eraser.start <= block.start) && (eraser.end >= block.end))
blockList.remove(block);
else if ((eraser.start <= block.start) && (eraser.end < block.end)){
block.set(start, eraser.end);
else if() {
...
//more code for where the eraser partially erases the beginning, end, or splits the block
//if statements call the .add(), .set(), and remove() methods on the blockList.
...
}
}
}
我不明白爲什麼我得到併發修改異常。我從不修改eraserList。
我試圖修改在「Block block = it.next();」中分配的塊對象,聲明。我也通過刪除或添加塊列表來修改blockList。我認爲ListIterator的重點在於它允許您修改,添加或減去您正在瀏覽的列表。
Failure Trace指向Blocks橡皮擦= it.next();作爲繪製例外的線條,但我不知道那是告訴我什麼。
任何人都可以幫我弄清楚我做錯了什麼嗎?
謝謝!
雖然你正在修改blockList,但你可以對迭代器進行的唯一修改是調用it.remove(),它從列表中刪除當前項目。列表本身的任何操作都會導致併發修改異常。 – pents90 2012-02-23 21:18:50