这么写对不对?为什么是按成绩从大到小排列显示的?

这么写对不对?为什么是按成绩从大到小排列显示的?

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());
        }
         
    }
 
}

这么写对不对?为什么输出是按成绩从大到小排列显示的?是自动默认成绩从大到小排序吗?怎么样才能输出效果图那样成绩从小到大的排序!

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

首先代码是对的哦,关于输出会排序的问题我试了一下,结果是和你一样的,但是当我把集合里个数增加时,输出就不再是有序的了。查阅了一下网上的相关资料,应该是我们存储的时候Java会根据一定的hash算法获取hashCode,然后按照这个值存储。另外注意有序输出和有序存储是不一样的,老师所说的Set是无序的,指的应该是无序存储,比如我们输入【2,1,3】,如果输出也是【2,1,3】,这样才是有序,而输出【1,2,3】相对于我们的输入顺序他就是无序的,因此Set还是无序的。

不知道理解的对不对,还是请老师解答~~http://img1.sycdn.imooc.com//climg/5d369c9500012d8607180737.jpg

  • 同学你好,Set集合是无序的集合,这里的无序指的是存入时无序,它的存入顺序和hashCode的值有关,hashCode值不同,存入的顺序就可能不同,读取时顺序是根据存入的顺序来读的哦! 所以这里的Set集合存入时也就是无序的哦!如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
    2019-07-23 14:59:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码