2017-05-25 97 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 –

相關問題