我有一段代码,我至少运行了 100 次没有问题,我需要使用不同的类重新实现一个类似的版本,所以我重写了它,现在在迭代器上调用 remove 时出现非法状态异常.但是在调试时,所有信息都在那里,可以按预期删除元素。
新资产是一个数组
List<DTO> dtoList = this.getAssets();
for(int i = 0; i < newAssets.length; i++) {
Iterator<DTO> iterator = dtoList.iterator();
while (iterator.hasNext()) {
DTO current = iterator.next();
if(condition) {
iterator.remove();
newAssets[i] = null;
break;
}
}
}
这会产生非法状态异常错误
与此同时
for(int i = 0; i < array.length; i++) {
Iterator<diffDTO> iterator = dbList.iterator();
while (iterator.hasNext()) {
diffDTO current = iterator.next();
if(condition)) {
iterator.remove();
array[i] = null;
break;
}
}
}
每次都很好,我完全不明白其中的区别。
我知道我需要在 .remove 之前在迭代器上调用 .next,我每次都这样做,然后跳出迭代 while 循环,因此 remove 应该只在被迭代的列表上调用一次。我已经审查了我能找到的所有实例,所有建议状态,在删除之前调用 next,我在第二个代码块中成功完成了。调试它显示所有值都按预期在执行时出现,但 remove 调用抛出该异常。
拜托,谁能指出我不明白的地方?我从字面上复制了第二个块,更新了变量的命名,但无法让第一个块运行。真的很茫然试图找到差异。
我希望从第一个代码块中获得与第二个代码块相同的功能,但它抛出了一个非法状态异常。