java.util.ConcurrentModificationException出现在程序中
java.util.ConcurrentModificationException occurs in the program
我正在尝试将从 main 方法传递的 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;
}
Iterator
在创建 Iterator
后更改基础列表时抛出 ConcurrentModificationException
(在 ArrayList JavaDoc 中搜索 fail-fast)。
尝试将 Iterator
的创建移动到 Main.append
调用之后。
创建迭代器是为了遍历一个集合,一旦创建,它就会检查
每次使用它时都会修改,如果修改,它会在尝试再次访问集合时抛出 ConcurrentModificationException。
正如 twinklehawk 所说,您需要在完成附加后创建迭代器..
我正在尝试将从 main 方法传递的 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;
}
Iterator
在创建 Iterator
后更改基础列表时抛出 ConcurrentModificationException
(在 ArrayList JavaDoc 中搜索 fail-fast)。
尝试将 Iterator
的创建移动到 Main.append
调用之后。
创建迭代器是为了遍历一个集合,一旦创建,它就会检查 每次使用它时都会修改,如果修改,它会在尝试再次访问集合时抛出 ConcurrentModificationException。 正如 twinklehawk 所说,您需要在完成附加后创建迭代器..