方法:
第一种:实体对象实现Comparble接口,复写comparTo方法。
第二种:实体对象不需要改动,直接在调用排序的地方重写Collections.sort方法。
第一种:
实体对象Dog.java:
public class Dog implement<Dog> {
String name;
int age;
public Dog(String name,int age){
this.name = name;
this.age = age;
}
/**
*实现方法
*@return 当前对象的年龄减去其他对象年龄的差
*/
@Override
public int compareTo(Dog o){
return this.age - o.age;
}
}
使用方法举例TestRealizeImplements.java:
public class TestRealizeImplements {
public void testSort(){
//初始化用于测试的数据
List<Dog> dogList = new ArrayList<>();
Dog dog1 = new Dog("狗1号",10);
Dog dog2 = new Dog("狗2号",15);
Dog dog3 = new Dog("狗1号",12);
dogList.add(dog1);
dogList.add(dog2);
dogList.add(dog3);
//排序
Collections.sort(dogList);
//排序后的结果
for(Dog dog : dogList){
System.out.println(dog.name+":"+dog.age);
}
}
public static void main(String[] args){
TestRealizeImplements t = new TestRealizeImplements();
t.testSort();
}
}
简单来说就是实体类中的实现方法是重要的,在实现方法里写比较的逻辑
return值小的排在前面,如果比较条件不是int类型的,那就自行比较,然后让符合你需求的逻辑返回小的数值,不符合的返回大的数即可。
第二种方法:重写Collections.sort方法:
实体类Dog.java:
就是上面的dog类,去掉实现接口,去掉实现方法,变成一个基本的实体类
使用举例Test:
public class TestReWriteMethod {
public void testSort(){
//初始化用于测试的数据
List<Dog> dogList = new ArrayList<>();
Dog dog1 = new Dog("狗1号",10);
Dog dog2 = new Dog("狗2号",15);
Dog dog3 = new Dog("狗1号",12);
dogList.add(dog1);
dogList.add(dog2);
dogList.add(dog3);
//排序
Collections.sort(dogList,new Comparator<Dog>(){
@Override
public int compare(Dog o1,Dog o2){
return o1.age - o2.age;
}
})
//排序后的结果
for(Dog dog : dogList){
System.out.println(dog.name+":"+dog.age);
}
}
public static void main(String[] args){
TestReWriteMethod t = new TestReWriteMethod();
t.testSort();
}
}
简单来说就是第二种方法,相当于将第一种方法中实体的实现方法,移动到第二种方法的复写方法中去了。