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

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

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

}
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下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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