我使用 anIterator来迭代项目列表。根据元素的值,我需要删除当前项和后续项。但是,当连续删除多个项目时,出现异常IllegalStateException
代码示例:
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String elem = it.next();
if (elem != null && ...)
it.remove();
// condition #2
else if (elem != null && ...) {
it.remove();
if (it.hasNext())
it.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
如果满足条件#2,则删除元素时会出现错误。你能解释一下这种行为吗?谢谢!
在条件 #2 下第二次调用 method 时出错it.remove()。\n原因在于 Java 迭代器的原理,需要感知它们的位置是否在元素之间。\n当你调用 method 时,next()迭代器会跳转到下一个元素并返回对刚刚传递的元素的引用。
接口Iterator方法remove()- 删除上次调用返回的元素next()。\n在许多情况下,这是有意义的 - 在决定需要删除该项目之前,您需要查看该项目。但如果你想删除位于某个位置的元素,你就必须遍历它。
这Iterator似乎不是浏览您的案例列表的最佳方式。\xe2\x80\x99 使用你拥有的列表和其中的循环将更容易,循环将是你删除元素的逻辑。\n但是,如果你仍然需要使用迭代器,你需要修复第二个条件,如下所示:
// condition #2\n if (elem != null && ...) {\n it.remove();\n if (it.hasNext()) {\n it.next();\n it.remove();\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n