为什么HashSet的结果输出顺序跟我存放的顺序不一样?
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(1, "Tom", 87f);
Student stu2 = new Student(2, "Lucy", 95f);
Student stu3 = new Student(3, "William", 65f);
// 将Student类的对象添加到集合中
HashSet set = new HashSet();
set.add(stu1);
set.add(stu2);
set.add(stu3);
// 使用迭代器显示Student类的对象中的内容
Iterator it = set.iterator();
while(it.hasNext()==true) {
System.out.println(it.next());
}
}
}
public class Student {
// 根据需求完成Student类的定义
private int stuId;
private String name;
private float score;
public Student() {
}
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;
}
@Override
public String toString() {
return "[学号:" + stuId + "姓名:" + name + ",成绩:" + score + "]";
}
@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) {
if (this == obj)
return true;
if (obj.getClass() == Student.class) {
Student stu = (Student) obj;
return stu.getStuId() == stuId && stu.getName().equals(name);
}
return false;
}
}
正在回答
同学你好!因为HashSet是无序列表,所以输出的顺序与存放的顺序是不一样的。如果解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星