我知道如果要尝试通过简单循环将其从集合循环中删除,我将收到此异常:java.util.ConcurrentModificationException
。但是我正在使用Iterator,它仍然会产生此异常。知道为什么以及如何解决吗?
HashSet<TableRecord> tableRecords = new HashSet<>();
...
for (Iterator<TableRecord> iterator = tableRecords.iterator(); iterator.hasNext(); ) {
TableRecord record = iterator.next();
if (record.getDependency() == null) {
for (Iterator<TableRecord> dependencyIt = tableRecords.iterator(); dependencyIt.hasNext(); ) {
TableRecord dependency = dependencyIt.next(); //Here is the line which throws this exception
if (dependency.getDependency() != null && dependency.getDependency().getId().equals(record.getId())) {
tableRecords.remove(record);
}
}
}
}
您必须使用iterator.remove()
而不是tableRecords.remove()
仅当您使用迭代器中的remove方法时,才能删除列表中要迭代的项目。
编辑:
创建迭代器时,它将开始计算对集合应用的修改。如果迭代器检测到在不使用其方法(或在同一collection上使用另一个迭代器)的情况下进行了某些修改,则它无法再保证它不会在同一元素上传递两次或跳过一个元素,因此将引发此异常
这意味着您需要更改代码,以便仅通过iterator.remove(并且只有一个迭代器)删除项目
要么
列出要删除的项目,然后在完成迭代后将其删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句