java.util.ConcurrentModificationException在程序中发生

时间:2017-12-12 16:01:37

标签: java arraylist concurrentmodification

我正在尝试将从主方法传递的List<Integer> data的有限数量的元素复制到另一个List<Integer> remainder。当我调试程序并逐步运行代码行时,没有错误。但是当我尝试正常运行代码时,我得到了ConcurrentModificationError。我看过其他SO线程,我无法解决它。

public static List<Integer> calculate_remainder(List<Integer> data, int[] polynomial, List<Integer> append)
{
    List<Integer> remainder = new ArrayList<>();
    List<Integer> temp = new ArrayList<>();
    Iterator<Integer> data_iterator = data.iterator();

    data = Main.append(data, append);

    for (int i = 0; i < polynomial.length; i++)
    {
        if (data_iterator.hasNext())
        {
            remainder.add(data_iterator.next());
        }
    }

更新1:

public static List<Integer> append(List<Integer> data, List<Integer> append)
{
    data.addAll(append);
    return data;
}

2 个答案:

答案 0 :(得分:2)

在创建Iterator后更改基础列表时,

ConcurrentModificationException会引发Iterator(在ArrayList JavaDoc中搜索失败快速)。
/>尝试将Iterator的创建移至Main.append来电之后。

答案 1 :(得分:0)

创建迭代器以遍历集合,一旦创建它,​​它就会检查 每次使用时进行修改,如果修改,它会在尝试再次访问集合时抛出ConcurrentModificationException。 正如twinklehawk所说,你需要在完成追加后创建迭代器。