ConcurrentModificationException异常

131 阅读1分钟

一、异常产生原因

当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

/** * 删除快递 */
public void delete(Express express) {
    if (expressList.size() == 0)
        return;
    for (Express express1 : expressList) {
        if (express1 != null)
            if (express.equals(express1))
                expressList.remove(express1);
    }
}

在做快递柜项目时,遍历list集合时删除元素出现的异常

报错如下:

从第一行可以看出异常种类

从第二行可以看出异常发生位置在checkForComodification()方法中。

有兴趣小伙伴可以去研究一下ArrayList中的原码,这里我直接说下我的结论。

二、解决方法

/** * 删除快递 */
public void delete(Express express) {
    if (expressList.size() == 0)
        return;
    Iterator<Express> iterator = expressList.iterator();
    while (iterator.hasNext()) {
        Express express1 = iterator.next();
        if (express1 != null)
            if (express1.equals(express))
                iterator.remove();  //这里我们用itrator中的remove方法
    }
}