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

    技术2023-07-31  79

    文章目录

    前言例子场景——根据年龄升序排序自定义对象代码测试 参考资料

    前言

    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版》

    Processed: 0.010, SQL: 9