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上升

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

请帮助谢谢

解决方法

来自Comparator's documentation

一个比较函数,该函数对某些对象集合施加总排序。 ...

并且来自Comparator:compare's documentation

...

返回:

第一个参数小于,等于或大于第二个参数时,为负整数,零或正整数。

因此,Comparator仅定义顺序。由排序算法决定是否使用此信息并实际对数据结构进行排序。如果我们看一下QuicksortMerge Sort的工作方式,我们会发现这些算法只需要知道某个元素a是小于,等于还是大于{{1} },这是b提供的信息(通过返回值Comparator< 0= 0)。

现在,让我们解释> 0如何使其升序排序(让其命名为a - b Comparator),而asc使其如何降序排序( (让我们将此b - a命名为Comparator):对于两个desc,我们必须考虑三种不同的情况。

首先,假设Comparator。然后

  • a > b,根据a - b > 0ab“大”
  • asc,因此b - a < 0a“小”(根据b

接下来,假设desc。然后

  • a < b因此,根据a - b < 0ab“小”
  • asc,根据b - a > 0ab“大”

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