TreeSet实现自定义类的有序输出

        TreeSet是唯一有序的,如果是基本数据类型,它会按着自然顺序由小到大输出,但是涉及到自定义类型,就会涉及到各个属性比如我们自定义一个类Student,需要实现Comparable接口,实现自定义类型的排序
class Student implements Comparable<Student> {
	String name;
	int sid;
	double score;

	public Student(String name, int sid, double score) {
		super();
		this.name = name;
		this.sid = sid;
		this.score = score;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		long temp;
		temp = Double.doubleToLongBits(score);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + sid;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (Double.doubleToLongBits(score) != Double
				.doubleToLongBits(other.score))
			return false;
		if (sid != other.sid)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", sid=" + sid + ", score=" + score
				+ "]";
	}

	public int compareTo(Student o) {
		// 按照Student类的id输出
		return this.sid-o.sid;
	}

}

测试程序结果是否符合要求:

public class SetTest {

	public static void main(String[] args) {
		Set<Student> set = new TreeSet<Student>();
		set.add(new Student("宝玉", 1, 89));
		set.add(new Student("黛玉", 2, 87));
		set.add(new Student("袭人", 5, 87));
		set.add(new Student("宝钗", 4, 87));
		set.add(new Student("花花", 3, 89.9));
		for (Student student : set) {
			System.out.println(student);
			
		}
	}

}

输出结果

Student [name=宝玉, sid=1, score=89.0]
Student [name=黛玉, sid=2, score=87.0]
Student [name=花花, sid=3, score=89.9]
Student [name=宝钗, sid=4, score=87.0]
Student [name=袭人, sid=5, score=87.0]


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页