我正在搜索 ArrayList 并与 2 个迭代器进行比较。我正在将值写入最终将成为 XML 输出的字符串缓冲区。当我解析值时,我正在检查匹配的 itemId。匹配通常是零件和图纸。一个零件可以有许多图纸。对于我的 XML,我必须知道所有匹配项的类型和名称,并将这些值附加在一起。
使用这个 ArrayList:
itemId 类型名称
1000 份锤子
1001 份钉子
1000 dwg 语义
1002 份尺子
我的示例 XML 输出大致如下所示:
<Master itemId=1000 type=part name=hammer>
<Extra type=dwg name=semantic>
</Master>
<Master itemId=1001 type=part name=nail>
</Master>
<Master itemId=1002 type=part name=ruler>
</Master>
这是我的第一个循环
while (theBaseInterator.hasNext()){
ImportedTableObjects next = theBaseInterator.next();
currentEntry = next.identiferId;
currentType = next.typeId;
currentDatasetName = next.nameId;
compareInterator = tArray.listIterator(theBaseInterator.nextIndex());
compareEntriesofArray(currentEntry, currentType, currentDatasetName, compareInterator); <======= calling method for 2nd loop and compare check
}
我为第二个循环编写了一个方法并进行了比较
private void compareEntriesofArray(Object currentEntry, Object currentType, Object currentDatasetName, ListIterator<ImportedTableObjects> compareInterator)
object nextEntry;
while (compareInterator.hasNext()) {
ImportedTableObjects next = compareInterator.next();
nextEntry = next.identiferId;
if(nextEntry.equals(currentEntry)) {
compareInterator.remove();
}
当它找到匹配项时,我试图从列表中删除匹配项。无需重新检查已匹配的条目。因此,当第一个循环继续沿列表向下时 - 它不必再次检查该条目。
但当然我得到了 ConcurrentModificationException。我完全理解为什么。有没有一种方法可以代替尝试删除条目,而可以用布尔值或其他东西标记它,所以当第一个循环到达列表中的那个条目时,它知道跳过它并转到下一个?