踩坑记录(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--;
} } }

 

posted @ 2020-07-17 17:37  行路读书爱人i  阅读(202)  评论(0编辑  收藏  举报