关于迭代器有个小问题

关于迭代器有个小问题

public class CatTest2 {
    public static void main(String[] args) {
        Cat huahua = new Cat("花花", 12, "英国短毛猫");
        Cat fanfan = new Cat("凡凡", 3, "中华田园猫");
        Cat huahua02 = new Cat("花花二代", 5, "英国短毛猫");
        Set<Cat> set = new HashSet<Cat>();
        set.add(huahua);
        set.add(fanfan);
        set.add(huahua02);
        Iterator<Cat> it =set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        //我是一条分割线
        it=set.iterator();//此处若不加此语句 那么下面的while(it.hasNext()){}语句就不会运行
        System.out.println("****************");
        while(it.hasNext()){
            Cat c=it.next();
            if(c.getMonth()<5){
                set.remove(c);
            }
        }
        //每次删除后 都要记得重新把it再进行一次迭代
        it=set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }

如代码里的it=set.iterator();此处若不加此语句 那么下面的while(it.hasNext()){}语句就不会运行

迭代器每次运行都要重新遍历一次吗

因为我在debug中发现,如果不加it=set.iterator();语句,下面第一个while循环就会被跳过。

如果是,原理是什么呢?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

set.iterator()是获取迭代器的,hasNext()就是通过循环迭代判断是否存在下一个元素。

  • Iterator<Cat> it =set.iterator(); 那个我通过这一句,已经将我想要的set.iterator()附给了it 再通过下面的while循环后 如果我不加上一句it=set.iterator(); 那么再下面的while循环就不会被触发。 这样是不是说明,迭代器,被循环迭代过后,就会消失,需要重新获取呢
    2018-10-07 11:34:04
  • irista23 回复 提问者 我真的超级爱学习 #2
    it.next()已经将迭代器指向下移动一位了,并取出指向的元素,如果你不重新获取,上面循环跳出条件就是it.hasNext()返回false,没有下一个集合元素了。
    2018-10-07 11:39:25
  • 我真的超级爱学习 提问者 回复 irista23 #3
    谢谢老师!
    2018-10-07 11:53:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师