迭代器遍历关于next()的问题

作者在练习HashSet存储自定义对象的迭代器遍历时,发现因迭代器知识掌握不足出现问题。经思考和查资料得出结论,最后附上正确代码及显示结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习HashSet对于存储自定义对象的迭代器遍历的时候发现的,也算是自己对于迭代器知识的基本知识掌握不到位。特地另写一片加强印象。

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
//存储自定义对象
public class HashDemo1 {
    public static void main(String[] args){
        Set<Person> set = new HashSet<Person>();
        set.add(new Person("北岛",10));
        set.add(new Person("艾青",11));
        set.add(new Person("曾卓",12));
        set.add(new Person("常军凯",13));
        //迭代器遍历
        Iterator<Person> it = set.iterator();
        while(it.hasNext()){
        	//问题在此处的输出方式
            System.out.println(it.next().getName()+"  "+it.next().getAge());
            
            //System.out.println(it.next());
        } 
    }
}

上述代码 我先把惯用的输出方式注释掉
显示结果:

北岛  12
艾青  13

当时也是想了很久,最后上网查资料得出结论

可以看出第二个迭代器迭代时数据少了且Key与Value不对应。原因是每执行一次next(),指针都会下移一次,所以一次迭代里面next了两次,迭代出的数据就会减半,且不对应

因此有了上述情况,最后附上正确代码

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
//存储自定义对象
public class HashDemo1 {
    public static void main(String[] args){
        Set<Person> set = new HashSet<Person>();
        set.add(new Person("北岛",10));
        set.add(new Person("艾青",11));
        set.add(new Person("曾卓",12));
        set.add(new Person("常军凯",13));
        //迭代器遍历
        Iterator<Person> it = set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        } 
    }
}

显示结果:

Person{name='北岛', age=10}
Person{name='曾卓', age=12}
Person{name='艾青', age=11}
Person{name='常军凯', age=13}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值