运用 Comparable 接口实现自定义类的升序排序

前言

Java 中所有数字类型的基本类都可以使用 Arrays.sort 方法进行排序,有时候对于自定义类,我们也会有排序的需求,本文就此举一个简单的例子。

例子场景——根据年龄升序排序

假设我们有一组自定义对象,然后需要对此按照年龄从小到大进行排序,我们只需要这个自定义对象实现 Comparable 接口并覆盖重写 compareTo 方法即可。

自定义对象代码

package del;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class User implements Comparable<User>{
    private int age;
    private String name;
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return name+"的年龄是"+age;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(User o) {
        if(o == null){
            return -1;
        }
        //升序
        return this.getAge()>o.getAge()?1:-1;
    }
}

测试

public static void main(String [] args){
        testCollectionsSort();
        testArraysSort();
    }

    private static  void testCollectionsSort(){
        User u1 = new User();
        u1.setAge(10);
        u1.setName("Jecket1");

        User u2 = new User();
        u2.setAge(5);
        u2.setName("Jecket2");

        User u3 = new User();
        u3.setAge(1);
        u3.setName("Jecket3");

        List list = new ArrayList();
        list.add(u1);
        list.add(u2);
        list.add(u3);

        System.out.println(list.toString());
        Collections.sort(list);
        System.out.println(list.toString());
    }

    private static void testArraysSort(){
        User u1 = new User();
        u1.setAge(10);
        u1.setName("Jecket1");

        User u2 = new User();
        u2.setAge(5);
        u2.setName("Jecket2");

        User u3 = new User();
        u3.setAge(1);
        u3.setName("Jecket3");

        User[] array = new User[3];
        array[0] = u1;
        array[1] = u2;
        array[2] = u3;

        System.out.println(Arrays.toString(array));
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
    }

测试结果

[Jecket1的年龄是10, Jecket2的年龄是5, Jecket3的年龄是1]
[Jecket3的年龄是1, Jecket2的年龄是5, Jecket1的年龄是10]
[Jecket1的年龄是10, Jecket2的年龄是5, Jecket3的年龄是1]
[Jecket3的年龄是1, Jecket2的年龄是5, Jecket1的年龄是10]

参考资料

[1]、《Effective Java 第2版》

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页