java比较器

本文详细介绍了在Java中使用内部比较器和外部比较器进行对象排序的方法。通过实现Comparable接口或Comparator接口,可以对自定义类的对象进行升序或降序排序,适用于列表和数组。文章通过具体示例展示了如何定义比较逻辑并应用于实际排序操作。

1. 内部比较器

思路:需比较的类实现Comparable接口,重写compareTo方法,使该类对外提供一个默认比较的实现。

@Getter
@Setter
@ToString
@AllArgsConstructor
public class UserInnerComparator implements Comparable<UserInnerComparator> {
    Integer id;
    Integer age;

    @Override
    public int compareTo(UserInnerComparator o) {
        return this.age - o.getAge();
    }

    public static void main(String[] args) {
        UserInnerComparator user1 = new UserInnerComparator(1, 18);
        UserInnerComparator user2 = new UserInnerComparator(2, 28);
        UserInnerComparator user3 = new UserInnerComparator(3, 25);
        UserInnerComparator user4 = new UserInnerComparator(4, 15);
        System.out.println("-------- test list --------");
        ArrayList<UserInnerComparator> list = new ArrayList<UserInnerComparator>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        Collections.sort(list);
        printList(list);
        System.out.println("-------- test array --------");
        UserInnerComparator[] arr = new UserInnerComparator[4];
        arr[0] = user1;
        arr[1] = user2;
        arr[2] = user3;
        arr[3] = user4;
        Arrays.sort(arr);
        printArray(arr);
    }

    public static void printList(ArrayList<UserInnerComparator> list) {
        for (UserInnerComparator user : list) {
            System.out.println(user);
        }
    }

    public static void printArray(UserInnerComparator[] arr) {
        for (UserInnerComparator user : arr) {
            System.out.println(user);
        }
    }
}

运行结果如下:

-------- test list --------
UserInnerComparator(id=4, age=15)
UserInnerComparator(id=1, age=18)
UserInnerComparator(id=3, age=25)
UserInnerComparator(id=2, age=28)
-------- test array --------
UserInnerComparator(id=4, age=15)
UserInnerComparator(id=1, age=18)
UserInnerComparator(id=3, age=25)
UserInnerComparator(id=2, age=28)

2. 外部比较器

思路:定义新的比较器类作为工具类,实现Comparator接口,实现compare<T t1, T t2>方法。需比较的类不做任何实现,调用sort方法排序时传入list/array和比较器。

public class UserOuterComparator implements Comparator<User> {
    @Override
    public int compare(User u1, User u2) {
        return u1.getAge() - u2.getAge();
    }

    public static void main(String[] args) {
        User user1 = new User(1, 18);
        User user2 = new User(2, 28);
        User user3 = new User(3, 25);
        User user4 = new User(4, 15);
        System.out.println("-------- test list --------");
        ArrayList<User> list = new ArrayList<User>();
        UserOuterComparator uoc = new UserOuterComparator();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        Collections.sort(list, uoc);
        printList(list);
        System.out.println("-------- test array --------");
        User[] arr = new User[4];
        arr[0] = user1;
        arr[1] = user2;
        arr[2] = user3;
        arr[3] = user4;
        Arrays.sort(arr,uoc);
        printArray(arr);
    }

    public static void printList(ArrayList<User> list) {
        for (User user : list) {
            System.out.println(user);
        }
    }

    public static void printArray(User[] arr) {
        for (User user : arr) {
            System.out.println(user);
        }
    }
}

@Getter
@Setter
@ToString
@AllArgsConstructor
class User {
    Integer id;
    Integer age;
}

运行结果如下:

-------- test list --------
User(id=4, age=15)
User(id=1, age=18)
User(id=3, age=25)
User(id=2, age=28)
-------- test array --------
User(id=4, age=15)
User(id=1, age=18)
User(id=3, age=25)
User(id=2, age=28)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值