练习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}