为什么我不能使用迭代器连续删除 2 个项目?

1 java iterator

我使用 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,则删除元素时会出现错误。你能解释一下这种行为吗?谢谢!

Dmi*_*ora 5

在条件 #2 下第二次调用 method 时出错it.remove()。\n原因在于 Java 迭代器的原理,需要感知它们的位置是否在元素之间。\n当你调用 method 时,next()迭代器会跳转到下一个元素并返回对刚刚传递的元素的引用。

\n\n

接口Iterator方法remove()- 删除上次调用返回的元素next()。\n在许多情况下,这是有意义的 - 在决定需要删除该项目之前,您需要查看该项目。但如果你想删除位于某个位置的元素,你就必须遍历它。

\n\n

Iterator似乎不是浏览您的案例列表的最佳方式。\xe2\x80\x99 使用你拥有的列表和其中的循环将更容易,循环将是你删除元素的逻辑。\n但是,如果你仍然需要使用迭代器,你需要修复第二个条件,如下所示:

\n\n
       // condition #2\n       if (elem != null && ...) {\n           it.remove();\n           if (it.hasNext()) {\n               it.next();\n               it.remove();\n           }\n       }\n
Run Code Online (Sandbox Code Playgroud)\n