关于HashMap上的android:ConcurrentModificationException(不迭代它)

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只能用于检测错误。