java各种排序方法(Java基础学习类的自然排序Comparable)
java各种排序方法(Java基础学习类的自然排序Comparable)Comparable自然排序几点说明:Comparable自然排序/* 创建学生类,定义两个变量name,age 创建成员变量的get和set方法以及类的无参和带参方法 */ public class Student { private String name; private int age; public Student() {} public Student(String name int age) { this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return
Comparable是个接口,它可以实现类的对象的整体排序,我们称这种排序为自然排序。
例题讲解:
要求:存储学生对象并遍历,按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序。
创建学生类:
/*
创建学生类,定义两个变量name,age
创建成员变量的get和set方法以及类的无参和带参方法
*/
public class Student {
private String name;
private int age;
public Student() {}
public Student(String name int age) {
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
创建main方法
public static void main(String[] args) {
//创建集合对象
TreeSet<Student> ts = new TreeSet<>();
//创建学生对象
Student s1 = new Student("xishi" 29);
Student s2 = new Student("wangzhaojun" 28);
Student s3 = new Student("diaochan" 30);
Student s4 = new Student("yangyuhuan" 33);
Student s5 = new Student("lengfeng" 33);
//把学生添加到集合中
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
//遍历集合
for(Student s:ts) {
System.out.println(s.getName() " " s.getAge());
}
}
让学生类(Student)实现Comparable接口,并在学生类中重写compareTo()方法
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student() {}
public Student(String name int age) {
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student s) {
//compareTo()方法返回值类型:
//return 0;//说明元素是重复的,所以只会添加一个元素
//return 1;//升序存储(按照存储的顺序输出)
//return -1;//逆序存储(降序)
/*
实现案列需求
*/
//按照年龄从小到大排序
int num = this.age-s.age;//this.age其实就是S2的年龄,s.age其实就是S1的年龄
//int num = s.age-this.age;//按照年龄从大到小排序
int num1 = num==0?this.name.compareTo(s.name):num;//字符串直接使用compareTo
return num1;
}
}
结果显示:
Comparable自然排序
Comparable自然排序几点说明:
- compareTo()返回值类型
return 0;//说明元素是重复的,所以只会添加一个元素
return 1;//升序存储(按照存储的顺序输出)
return -1;//逆序存储(按照存储的逆序输出)
- int num = this.age - s.age;//this.age其实就是S2的年龄,s.age其实就是S1的年龄
- 如果想要降序排序,就倒过来。int num = s.age - this.age
- 关于字符串的比较直接使用compareTo()方法。例如:this.name.compareTo(s.name)