踩坑记录(java)-双层增强for调用remove(obj)报错 java.util.ConcurrentModificationException(并发修改异常)
- 错误代码
for (TbUserMessage n : newMessages) { for (TbUserMessage o : oldMessage) { if (n.getMessageId().equals(o.getMessageId()) || n.getUserId().equals(o.getUserId())) { newMessages.remove(n); } } }
2层增强for嵌套remove(obj)会报ConcurrentModificationException 具体原因自行百度
- 解决办法
使用普通for 使用下标删除,至于其他方法,网上说法不一。
for (int i = 0; i < newMessages.size(); i++) { for (int j = 0; j < oldMessage.size(); j++) { if (newMessages.get(i).getMessageId().equals(oldMessage.get(j).getMessageId()) && newMessages.get(i).getUserId().equals(oldMessage.get(j).getUserId())) { newMessages.remove(i);
//另 网上一位前辈会在此处将i的下标自减 因为我在测试时并没有发现问题 所以此处没有用
//i--;
} } }