gpt4 book ai didi

java - 迭代器 hasNext 意味着列表永远不会为空

转载 作者:行者123 更新时间:2023-11-30 09:30:52 24 4
gpt4 key购买 nike

我只是有一个关于迭代器的快速问题。

我目前想从两个对象列表中删除重复项。

我现在设置它的方式是,只要第二个列表(需要从第一个列表中删除的对象列表)有项目,进行合并的循环就会继续运行。

我一直在使用 hasNext() 函数来检查是否还有项目,但我认为这可能存在一些小问题。

当迭代器指向列表中的最后一项并调用 hasNext() 时,它将返回 false,因为最后一项之后没有任何内容。这意味着该项目不会从第一个列表中删除。是真的吗?

代码如下:

for (Iterator<Card> discardItr = discard.iterator(); discardItr.hasNext();)
{
Card tempDiscard = discardItr.next();

Iterator<Card> mixedItr = mixedHand.iterator();
while (mixedItr.hasNext())
{
if (tempDiscard.equals(mixedItr.next()))
{
discardItr.remove();
mixedItr.remove();
}
}

}

最佳答案

Iterator 将遍历整个列表,即使您调用了 iterator#remove。例如运行

public class IteratorDemo {
public static void main( String[] args ) {
List<String> list = new ArrayList<>( );
list.addAll( Arrays.asList("first", "second", "third" ) );
Iterator<String> iterator = list.iterator();
while ( iterator.hasNext() ) {
String next = iterator.next();
System.out.println(next);
iterator.remove();
}
}
}

产生以下输出

first
second
third

所以你的代码会起作用(你当然会通过尝试发现它)

关于java - 迭代器 hasNext 意味着列表永远不会为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094134/

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