Java中Comparator的使用

一直对Comparator中的compare方法不太理解,每次用到都要去查好久,这次记录一下自己的理解。

需求:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]],每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。现按照身高降序排列,ki按升序排列。

身高降序排列:如果person2[0] - person1[0]>0说明后面的人比前后面的人高,需要调整,如果person2[0] - person1[0]<0说明后面的人比前面的人低,不用调整。从而达到降序排列。

Ki升序排列:如果person1[1] - person2[1]>0说明后前面的人比后面的人高,需要调整,如果person1[1] - person2[1]<0说明前面的人比后前面的人低,不用调整。从而达到升序排列。

这里person1表示位于前面的对象,person2表示后面的对象
返回-1(或负数),表示不需要交换01和02的位置,person1排在person2前面,asc
返回1(或正数),表示需要交换01和02的位置,person1排在person2后面,desc

Arrays.sort(people, new Comparator<int[]>() {
            public int compare(int[] person1, int[] person2) {
                if (person1[0] != person2[0]) {
                    return person2[0] - person1[0];
                } else {
                    return person1[1] - person2[1];
                }
            }
        });
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Comparator 是一个接口,它定义了比较两个对象的方法。在 Java ,我们可以使用 Comparator 接口来实现自定义对象的排序。下面是使用 Comparator 接口的步骤: 1. 创建 Comparator 实现类,该类实现 Comparator 接口,并重写 compare 方法。 2. 在 compare 方法,编写自定义的对象比较逻辑。 3. 在需要排序的地方,使用 Collections.sort() 方法,并传入 Comparator 实现类的对象作为参数。 4. 排序完成后,对象列表将按照自定义比较逻辑的顺序进行排序。 下面是一个使用 Comparator 接口的示例代码: ``` public class Student { private String name; private int age; private int score; // 构造方法和 getter/setter 略 // 实现一个 Comparator 接口的比较方法 public static class ScoreComparator implements Comparator<Student> { @Override public int compare(Student s1, Student s2) { return s1.getScore() - s2.getScore(); } } public static void main(String[] args) { List<Student> students = new ArrayList<>(); students.add(new Student("Tom", 18, 90)); students.add(new Student("Jerry", 20, 80)); students.add(new Student("Mickey", 19, 95)); // 使用自定义的 ScoreComparator 进行排序 Collections.sort(students, new ScoreComparator()); // 输出排序结果 for (Student student : students) { System.out.println(student.getName() + " " + student.getAge() + " " + student.getScore()); } } } ``` 输出结果为: ``` Jerry 20 80 Tom 18 90 Mickey 19 95 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值