这么写对不对?为什么是按成绩从大到小排列显示的?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | package heshset; public class Student { // 根据需求完成Student类的定义 private int stuld; // 学号 private String name; // 姓名 private float score; // 成绩 public Student() { } public Student( int stuld, String name, float score) { super (); this .stuld = stuld; this .name = name; this .score = score; } public int getStuld() { return stuld; } public void setStuld( int stuld) { this .stuld = stuld; } 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 "[学号:" + stuld + ", 姓名:" + name + ", 成绩:" + score + "]" ; } @Override public int hashCode() { final int prime = 31 ; int result = 1 ; result = prime * result + stuld; result = prime * result + ((name == null ) ? 0 : name.hashCode()); result = prime * result + Float.floatToIntBits(score); return result; } // @Override public boolean equals(Object obj) { if ( this == obj) return true ; if (obj.getClass()==Student. class ) { Student c=(Student) obj; return c.getName().equals(name)&&(c.getStuld()==stuld) &&(c.getScore()==score); } return false ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package heshset; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class StudentTest { public static void main(String[] args) { //定义三个Student类的对象及一个HashSet类的对象 Student one= new Student( 3 , "William" , 65 ); Student two= new Student( 1 , "Tom" , 87 ); Student three= new Student( 2 , "Lucy" , 95 ); //将Student类的对象添加到集合中 Set a= new HashSet(); a.add(one); a.add(two); a.add(three); //使用迭代器显示Student类的对象中的内容 Iterator b=a.iterator(); while (b.hasNext()) { System.out.println(b.next()); } //添加一个重复数据到Set中,观察输出结果 Student one1= new Student( 3 , "William" , 65 ); a.add(one1); System.out.println( "**************************************" ); b=a.iterator(); while (b.hasNext()) { System.out.println(b.next()); } } } |
这么写对不对?为什么输出是按成绩从大到小排列显示的?是自动默认成绩从大到小排序吗?怎么样才能输出效果图那样成绩从小到大的排序!
2
收起
正在回答
1回答
首先代码是对的哦,关于输出会排序的问题我试了一下,结果是和你一样的,但是当我把集合里个数增加时,输出就不再是有序的了。查阅了一下网上的相关资料,应该是我们存储的时候Java会根据一定的hash算法获取hashCode,然后按照这个值存储。另外注意有序输出和有序存储是不一样的,老师所说的Set是无序的,指的应该是无序存储,比如我们输入【2,1,3】,如果输出也是【2,1,3】,这样才是有序,而输出【1,2,3】相对于我们的输入顺序他就是无序的,因此Set还是无序的。
不知道理解的对不对,还是请老师解答~~
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧