要实现对一个对象中的某一个属性进行排序
这里是外部排序,在Student类中写排序的方法
package Comparable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class ComparableDemo {
public static void main(String[] args) {
//泛型 用<>表示 他是为了限制集合里没存放的元素类型
//后面的<>可写可不写
ArrayList<Student> list = new ArrayList<Student>();
//添加
list.add(new Student("小李",20,85,"陕西"));
list.add(new Student("小李",20,86,"北京"));
list.add(new Student("小李",21,89,"榆林"));
list.add(new Student("小李",19,92,"安康"));
list.add(new Student("小李",22,76,"上海"));
//按照年龄进行排序
//如果年龄相同,按照分数降序排序
//需要用到Comparable(接口) 内部排序,必须在类上去实现接口
Collections.sort(list);
//foreach 循环遍历输出
//这里一样要重写toString方法,否则打印出来的是对象的地址值
for (Student student : list) {
System.out.println(student);
}
}
}
```java
package Comparable;
import java.security.KeyStore;
//内部排序 去实现Comparable接口 并且重写compareTo接口
public class Student implements Comparable<Student> {
private String name;
private int age;
private int grade;
private String address;
public Student() {
}
public Student(String name, int age, int grade, String address) {
this.name = name;
this.age = age;
this.grade = grade;
this.address = address;
}
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;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//重写内部排序的方法
@Override
public int compareTo(Student that) {
if(this.age==that.age){
//我们是要根据分数去排序
//this.grade(你想去比较的字段)-that.grade;这个是升序
return that.grade-this.grade;
}else{
return this.age-that.age;
}
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", grade=" + grade +
", address='" + address + '\'' +
'}';
}
}