我在尝试从HashMap中删除条目时遇到ConcurrentModificationException而我无法弄清楚原因。我不迭代它,我只是检查它是否包含给定的密钥并删除映射到它的值(如果有的话)。我已经阅读过这方面的问题,但是所有人都试图在不使用迭代器的情况下迭代它来修改HashMap,这不是我的情况。
这是代码
serverTasksNotInDB = CompareLists.serverTasksNotInDB(localTasks, serverTasks);
if (serverTasksNotInDB != null && !serverTasksNotInDB.isEmpty()) {
for (Task serverTask : serverTasksNotInDB) {
String id = serverTask.getId();
mPresenter.addTaskFirstTimeFromServer(serverTask, currentListId);
if (serverTasks != null) {
serverTasks.remove(serverTask);
boolean containsKey = serverTasksMap.containsKey(id);
if (containsKey) {
//TODO Fix concurrency modification exception here (down)
serverTasksMap.remove(id);
}
}
}
}
答案 0 :(得分:0)
for(Task serverTask:serverTasksNotInDB)
实际上serverTasksNotInDB ArrayList调用iterator()方法。
foreach Api说明。
失败快速操作会在尽力而为的基础上抛出ConcurrentModificationException。因此,编写依赖于此异常的程序的正确性是错误的:ConcurrentModificationException应该仅用于检测错误。