gpt4 book ai didi

java - 为什么 pollFirst/Last() 在使用 for 语句迭代时无法检索 NavigableSet 的每个元素?

转载 作者:行者123 更新时间:2023-12-01 09:57:09 25 4
gpt4 key购买 nike

在尝试从集合中检索元素时,我更喜欢使用 pollFirst() 因为它减少了笨重的命题并有助于在检索后删除元素。为了迭代集合,我使用了通用的“for”方法,该方法只允许检索集合的一部分。我做了一些搜索,找到了建议使用 while 语句的解决方案。但为什么会发生这种情况呢?为了缓解问题陈述,我提供了微妙的评论。

    class SetTest {
public static void main(String[] args) {
TreeSet<String> ts = new TreeSet<String>();
ts.add(new String(new String("one")));
ts.add("two");
ts.add(new String("three"));
NavigableSet<String> ns = new TreeSet<String>();
ns.addAll(ts);
System.out.println("Before while " + ns.size());// gives us 3
while (ns.size() != 0)
ns.pollFirst();
System.out.println("After while " + ns.size());// gives us 0.
System.out.println("Before for " + ts.size());// gives us 3
for (int i = 0; i < ts.size(); i++)
ts.pollFirst();
System.out.println("After for " + ts.size());// gives us 1. WHY??
}
}

最佳答案

可能是因为 ts 的大小在 for 循环期间发生变化,例如,如果大小等于 10,则循环可能会像这样:

i = 0; size = 10
i = 1; size = 9
i = 2; size = 8
i = 3; size = 7
i = 4; size = 6
i = 5; size = 5 -> breaks the for loop.

编辑:忘记提及您可以通过将条件更改为

来修复它
for(int i = 0; ts.size() != 0; i++)

或者将大小保存在外部变量中并在 for 循环中使用它。

关于java - 为什么 pollFirst/Last() 在使用 for 语句迭代时无法检索 NavigableSet 的每个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37101408/

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