温馨提示×

温馨提示×

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

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

Java 比较器怎么写

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

在 Java 中,“比较器”通常指 ComparatorComparable 接口。下面用最常见、最实用的方式给你讲清楚,并配上示例。


一、两种方式对比

方式 接口 作用 使用场景
Comparable compareTo() 定义自然排序 类本身就有固定排序规则
Comparator compare() 定义外部比较规则 多种排序方式、临时排序

二、Comparable(自然排序)

类自己实现排序规则

示例:按年龄排序

class Person implements Comparable<Person> {
    int age;
    String name;

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

    @Override
    public int compareTo(Person o) {
        return this.age - o.age; // 升序
    }
}

使用

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

Collections.sort(list);

list.forEach(p -> System.out.println(p.name + " " + p.age));

✅ 输出:

Jack 18
Tom 20

三、Comparator(推荐,更灵活)

1️⃣ 匿名内部类写法(老写法)

Comparator<Person> comparator = new Comparator<Person>() {
    @Override
    public int compare(Person o1, Person o2) {
        return o1.age - o2.age;
    }
};

2️⃣ Lambda 写法(最常用 ✅)

Comparator<Person> comparator = (o1, o2) -> o1.age - o2.age;

3️⃣ 多条件排序

先按年龄,再按姓名

Comparator<Person> comparator = (o1, o2) -> {
    int r = o1.age - o2.age;
    if (r != 0) return r;
    return o1.name.compareTo(o2.name);
};

4️⃣ 使用 Comparator 工具方法(推荐 ✅)

Comparator<Person> comparator =
        Comparator.comparing(Person::getAge)
                  .thenComparing(Person::getName);

四、排序使用方式

List<Person> list = new ArrayList<>();

// 排序
list.sort(comparator);

// 或
Collections.sort(list, comparator);

五、常见排序规则写法

升序

(o1, o2) -> o1 - o2

降序

(o1, o2) -> o2 - o1

字符串排序

Comparator.comparing(Person::getName)

倒序

Comparator.comparing(Person::getAge).reversed()

六、总结一句话

类本身有固定顺序 → 用 Comparable
排序规则多变 / 临时排序 → 用 Comparator(推荐)


如果你有具体场景(比如 Map 排序、对象 List 排序、TreeSet 排序),我可以给你针对性示例

向AI问一下细节

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

AI