gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:37:25 24 4
gpt4 key购买 nike

我使用 Iterator迭代项目列表。根据元素的值,我需要删除当前和以下项目。
但是,当连续删除多个项目时,我得到一个异常 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();
}
}

如果满足条件 #2,删除元素时会出错。
你能解释一下这种行为吗?谢谢!

最佳答案

第二次调用方法 it.remove() 时出现错误在条件#2。
原因在于 Java 迭代器的原理,需要将其视为它们的位置在元素之间。
当你调用方法 next() ,迭代器跳转到下一个元素并返回对它刚刚传递的元素的引用。
Iterator接口(interface)方法remove() - 删除最后 next() 返回的元素称呼。
在许多情况下,这是有道理的——您需要先查看该项目,然后再决定是否需要删除它。 但是如果你想删除位于某个位置的元素,你将不得不通过它。
Iterator似乎不是浏览您的案例列表的最佳方式。使用您拥有的列表和其中的循环将是您删除元素的逻辑更容易。
但是,如果您仍然需要使用 Iterator,则需要将第二个条件修复如下:

       // condition #2
if (elem != null && ...) {
it.remove();
if (it.hasNext()) {
it.next();
it.remove();
}
}

关于java - 为什么我不能使用迭代器连续删除 2 个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59327208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com