ConcurrentModificationException on HashMap (NOT iterating through it)
当我试图从哈希图中删除一个条目时,我得到了一个ConcurrentModificationException,我不知道为什么。我不是在迭代它,我只是检查它是否包含一个给定的键,如果它包含,则删除映射到它的值。我已经阅读过关于这个的问题,但所有这些问题都是人们在不使用迭代器(这不是我的情况)迭代散列图的同时试图修改散列图。
这是密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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(任务服务器task:servertasksnotindb)
实际上,serverTasksNotInDB arraylist调用迭代器()方法。
foreach API描述。
fail fast操作在最大努力的基础上抛出ConcurrentModificationException。因此,编写一个依赖于此异常的程序来保证其正确性是错误的:ConcurrentModificationException只能用于检测错误。