1、提出问题
请问下面代码输出结果为什么?
public class test {
public static void main(String[] args) {
Set<Long> set = new LinkedHashSet<>();
set.add(1L);
set.add(2L);
set.add(3L);
while (set.iterator().hasNext()){
Long value = set.iterator().next();
System.out.println(value);
}
}
}
输出结果
1
1
1
1
1
1
...
一直循环打印1
2、原因分析
我们单步调试可知
两次迭代器的地址不一样,追究其源码
由源码可知,set每调一次Iterator都会生成新的迭代器,故会一直循环打印1
3、解决方法
由第二步分析原因可知,只需将代码稍微调整,在循环之前生成一个迭代器,就相当于实例化一下
public class test {
public static void main(String[] args) {
Set<Long> set = new LinkedHashSet<>();
set.add(1L);
set.add(2L);
set.add(3L);
Iterator<Long> iterator = set.iterator();
while (iterator.hasNext()){
Long value = iterator.next();
System.out.println(value);
}
}
}
输出结果为:
1
2
3