2017-05-25 86 views
0

我在尝试从HashMap中删除条目时遇到了ConcurrentModificationException,我无法弄清楚原因。我是而不是遍历它,我只是检查它是否包含给定的键,并删除映射到它的值,如果它。我已经阅读过这个问题,但他们都是试图修改HashMap而不使用迭代器的迭代器,而这并不是我的情况。HashMap上的ConcurrentModificationException(不会迭代它)

这是(任务serverTask:serverTasksNotInDB)代码

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

实际上serverTasksNotInDB ArrayList的呼叫iterator()方法。

foreach Api描述。

快速失败操作在尽力而为基础上抛出ConcurrentModificationException。因此,编写一个依赖于此异常的程序是正确的:编写ConcurrentModificationException应该只用于检测错误。

+0

尝试另一种方式 –

+0

对不起,请您详细解释一下吗? –

+0

https://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work –

相关问题