温馨提示×

温馨提示×

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

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

java Comparator 是什么

发布时间:2026-09-13 02:57:46 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,Comparator 是一个函数式接口(Functional Interface),位于 java.util 包下,用于定义对象之间的排序规则(比较规则)


一、Comparator 是什么?

Comparator 是一个比较器,用来告诉 Java:“两个对象谁大谁小,怎么排?”

Comparable 不同:

  • Comparable对象自己定义排序规则(类内部实现)
  • Comparator外部定义排序规则(不修改原类)

二、Comparator 接口定义

@FunctionalInterface
public interface Comparator<T> {
    int compare(T o1, T o2);
}

compare 方法规则:

  • 返回 负数o1 < o2
  • 返回 0o1 == o2
  • 返回 正数o1 > o2

三、基本使用示例

1️⃣ 按年龄排序(自定义 Comparator)

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
Comparator<Person> byAge = new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        return p1.age - p2.age;
    }
};

List<Person> list = new ArrayList<>();
list.sort(byAge);

四、Java 8+ 的简洁写法(常用)

1️⃣ Lambda 表达式

list.sort((p1, p2) -> p1.age - p2.age);

2️⃣ 使用 Comparator.comparing

list.sort(Comparator.comparing(p -> p.age));

或:

list.sort(Comparator.comparing(Person::getAge));

五、常用 Comparator 方法(Java 8+)

方法 说明
comparing() 按某字段排序
thenComparing() 多级排序
reversed() 倒序
nullsFirst() null 排前面
nullsLast() null 排后面

示例:先按年龄,再按姓名

list.sort(
    Comparator.comparing(Person::getAge)
              .thenComparing(Person::getName)
);

倒序排序

list.sort(Comparator.comparing(Person::getAge).reversed());

六、Comparator vs Comparable

对比点 Comparator Comparable
所在位置 外部类 类内部
方法 compare() compareTo()
是否修改原类 ❌ 不需要 ✅ 需要
灵活性 ✅ 高 ❌ 低

七、典型使用场景

  • Collections.sort(list, comparator)
  • list.sort(comparator)
  • TreeSet / TreeMap 构造函数
  • Stream 排序:stream.sorted(comparator)

如果你愿意,我可以:

  • 给你 完整可运行示例
  • Comparator 底层原理
  • 对比 Integer / String 排序机制
  • 面试常问点

你想看哪一个?

向AI问一下细节

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

AI