温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用 Comparator 排序

发布时间:2026-07-18 12:02:31 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

在 Java 里,Comparator 用来定义“自定义排序规则”,通常与 Collections.sort()List.sort() 一起使用。下面从基础到常见场景给你讲清楚。


一、Comparator 是什么?

Comparator<T> 是一个函数式接口,只有一个核心方法:

int compare(T o1, T o2);

返回值含义:

返回值 含义
< 0 o1 排在 o2 前面
= 0 相等
> 0 o1 排在 o2 后面

二、最基础示例(自定义排序)

1️⃣ 对整数从大到小排序

List<Integer> list = Arrays.asList(3, 1, 4, 2);

list.sort(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1; // 降序
    }
});

✅ 结果:[4, 3, 2, 1]


三、使用 Lambda 简化(推荐)

list.sort((o1, o2) -> o2 - o1);

或者:

list.sort((o1, o2) -> o1.compareTo(o2)); // 升序

四、对对象排序(最常见)

示例对象

class Student {
    String name;
    int age;

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

1️⃣ 按年龄升序排序

List<Student> students = new ArrayList<>();
students.add(new Student("Tom", 20));
students.add(new Student("Jack", 18));

students.sort((s1, s2) -> s1.age - s2.age);

2️⃣ 按年龄降序

students.sort((s1, s2) -> s2.age - s1.age);

3️⃣ 按姓名排序(字符串)

students.sort((s1, s2) -> s1.name.compareTo(s2.name));

五、使用 Comparator 工具方法(推荐 ✅)

Java 8 之后,Comparator 提供了很多静态方法,更优雅。

1️⃣ 单条件排序

students.sort(Comparator.comparingInt(s -> s.age));

或:

students.sort(Comparator.comparing(Student::getName));

2️⃣ 降序排序

students.sort(Comparator.comparing(Student::getAge).reversed());

3️⃣ 多条件排序(先年龄,再姓名)

students.sort(
    Comparator.comparing(Student::getAge)
              .thenComparing(Student::getName)
);

✅ 非常常用!


六、与 Comparable 的区别

对比 Comparator Comparable
所在包 java.util java.lang
方法 compare(o1, o2) compareTo(o)
是否侵入 ❌ 不修改原类 ✅ 修改原类
灵活性 ✅ 多种排序规则 ❌ 只有一种

一般推荐用 Comparator


七、常见坑

❌ 不要用减法排序(可能溢出)

return o1 - o2; // 不推荐

✅ 正确写法:

return Integer.compare(o1, o2);

八、总结一句话

Comparator 就是“告诉 Java 两个对象谁大谁小”,然后排序方法照着排。

如果你愿意,我可以:

  • 给你 TreeSet / TreeMap 的 Comparator 示例
  • 排序底层原理
  • 或针对你具体业务场景写排序代码
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI