【发布时间】:2022-01-21 04:36:01
【问题描述】:
我有一个单线程程序,它使用 Map 在迭代时一个一个地删除项目。我已经读过这里可以使用迭代器来避免ConcurrentModificationException,但为什么不使用 ConcurrentHashMap 来代替它似乎更干净?
我的代码:
private final Map<Integer, Row> rowMap;
.....
private void shutDown() {
for (Integer rowNumber : rowMap.keySet()) {
deleteRow(rowNumber)
}
}
....
对于我的场景,使用迭代器意味着将其声明为 final,因此 closeRow() 和 deleteRow() 方法可以访问它以将其删除。此外,iterator.remove() 方法不会返回要删除的项目的值,这在我的情况下是必需的。
我的问题是,最有效的方法是什么,它不会抛出 ConcurrentModificationException?是使用迭代器还是将 rowMap 设为 ConcurrentHashMap?
【问题讨论】:
-
请edit 发帖并提供minimal reproducible example。标准 Java API 中没有
ConcurrentMapException。对我来说,这个问题还不清楚。
标签: java hashmap iterator concurrenthashmap