HashMap 上的 ConcurrentModificationException(不遍历它)
ConcurrentModificationException on HashMap (NOT iterating through it)
我在尝试从 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);
}
}
}
}
for(任务 serverTask:serverTasksNotInDB)
实际上serverTasksNotInDB ArrayList调用iterator()方法。
foreach Api 描述。
快速失败操作在最大努力的基础上 抛出 ConcurrentModificationException。因此,编写依赖于此异常的正确性的程序是错误的:ConcurrentModificationException 应该仅用于检测错误。
我在尝试从 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);
}
}
}
}
for(任务 serverTask:serverTasksNotInDB)
实际上serverTasksNotInDB ArrayList调用iterator()方法。
foreach Api 描述。
快速失败操作在最大努力的基础上 抛出 ConcurrentModificationException。因此,编写依赖于此异常的正确性的程序是错误的:ConcurrentModificationException 应该仅用于检测错误。