首页 > 解决方案 > java比较器如何在内部工作?

问题描述

class Checker implements Comparator<Player> {
    @Override
    public int compare(Player p1, Player p2) {
        if (p1.score == p2.score) {
            return p1.name.compareTo(p2.name);
        } else {
            return p2.score - p1.score;
        }
    }
}

p2.score - p1.score 如何使其下降,而 p1.score - p2.score 使其上升

正整数或负整数或零返回如何对对象进行排序?内部发生了什么

请帮忙谢谢

标签: javacomparator

解决方案


Comparator的文档中:

一个比较函数,它对某些对象集合进行总排序。...

并来自Comparator:compare的文档

...

回报:

作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数。

因此,Comparator唯一定义了顺序。由排序算法来使用这些信息并对数据结构进行实际排序。如果我们看一下,例如快速排序合并排序是如何工作的,我们会发现这些算法只需要知道某个元素a是否小于、等于或大于b,这是 aComparator提供的信息(通过返回一个值< 0= 0> 0) .

现在让我们解释一下如何a - b使它按升序排序(让我们给它Comparator命名asc),同时b - a让它按降序排序((让我们给它Comparator命名desc):我们必须看看这两个Comparators 的三种不同情况。

首先,假设a > b. 然后

  • a - b > 0,因此ab根据asc
  • b - a < 0,因此ab根据desc

接下来,假设a < b. 然后

  • a - b < 0 因此ab根据asc
  • b - a > 0,因此ab根据desc

最后,假设a == b. 然后a - b == b - a == 0根据两个Comparators 元素是“相等的”。


推荐阅读