为什么每次调用完iterator()后,再次遍历set就为空了?需要重新对it赋值,it = set.iterator()后就又遍历出来了.

来源:3-4 案例:在集合中插入字符串

weixin_慕村4552609

2021-10-11 23:38:17

package com.imooc.set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetDemo1 {
public void showSet(Iterator it) {
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
System.out.println();
System.out.println("*******************");
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Set set = new HashSet();
set.add("white");
set.add("blue");
set.add("red");
set.add("black");
set.add("yellow");
Iterator it = set.iterator();

SetDemo1 sd = new SetDemo1();
sd.showSet(it);
//sd.showSet(it);需要重新赋值
set.add("green");
it = set.iterator();
sd.showSet(it);
set.add("white");
it = set.iterator();
sd.showSet(it);
}

}


写回答

1回答

好帮手慕小蓝

2021-10-12

同学你好,每一个Iterator只能使用一次,使用之后需要重新使用iterator()方法生成新的Iterator对象。

原因是Iterator的底层指针每次调用hasNext之后都会下移,一旦下移就无法自动回位。所以每次使用Iterator之后指针都在末尾,导致下一次遍历的时候hasNext返回结果为false,无法再次使用。

祝学习愉快~


0

0 学习 · 16556 问题

查看课程