输出顺序请老师指导一下
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class StudentTest { public static void main(String[] args) { //定义三个Student类的对象及一个HashSet类的对象 Student stu1=new Student(3,"William",65.0f); Student stu2=new Student(1,"Tom",87.0f); Student stu3=new Student(2,"Lucy",95.0f); //System.out.println(stu1); //将Student类的对象添加到集合中 Set set=new HashSet(); set.add(stu3); set.add(stu2); set.add(stu1); //使用迭代器显示Student类的对象中的内容 Iterator it=set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } System.out.println("插入重复数据后:"); //插入重复数据 Student stu4=new Student(2,"Lucy",95.0f); set.add(stu4); //使用迭代器显示Student类的对象中的内容 it=set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
public class Student{ //根据需求完成Student类的定义 private int stuId; private String name; private float score; public Student(int stuId,String name,float score){ this.setStuId(stuId); this.setName(name); this.setScore(score); } public int getStuId(){ return stuId; } public void setStuId(int stuId){ this.stuId=stuId; } public String getName(){ return name; } public void setName(String name){ this.name=name; } public float getScore(){ return score; } public void setScore(float score){ this.score=score; } public String toString(){ return "[学号:"+this.getStuId()+",姓名:"+this.getName()+",成绩:"+this.getScore()+"]"; } //重写hashCode方法 @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + Float.floatToIntBits(score); result = prime * result + stuId; return result; } @Override public boolean equals(Object obj) { //判断对象是否相等,相等则返回true,不用继续比较属性了 if(this==obj) return true; //判断obj是否是Student类的对象 if(obj.getClass()==Student.class){ Student stu=(Student) obj; return (stu.getStuId()==stuId)&&stu.getName().equals(name)&&(stu.getScore()==score); } return true; } }
老师,为啥我这怎么改,输出顺序都是2 1 3,改了插入集合的顺序也还是213
1
收起
正在回答
1回答
同学你好,HashSet的无序是指不会记录插入的顺序,
但是HashSet存值的时候会根据hashCode()来计算存储的位置;也就是说,首先会计算对象hashcode值,根据hashcode的值输出集合,而每次计算的对象hashcode值都是相同的,所以每次输出顺序都是213.
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星