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 应该仅用于检测错误。