我正在通過ArrayList進行搜索並與2個迭代器進行比較。我將值寫出到最終將成爲XML輸出的字符串緩衝區。當我解析值時,我正在檢查匹配的itemIds。比賽通常是零件和圖紙。一部分可以有很多圖紙。對於我的XML,我必須知道所有匹配的類型和名稱並將這些值附加在一起。Java - 解析帶有2個迭代器的ArrayList和可怕的ConcurrentModificationException
使用此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。我完全理解爲什麼。 有沒有一種方法,而不是試圖刪除條目,我可以如何標記一個布爾或什麼的,所以當第一個循環到達列表中的條目它知道要跳過它,並轉到下一個?
可以將您的商店的項目,你已經處理的二級結構,如'TreeMap',並檢查那裏呢? – mellamokb