java 比较器在内部是如何工作的?

How does java comparator work internally?

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如何让它下降 while p1.score - p2.score 使得是 ascend

正整数或负整数或零如何计算return 排序对象?内部情况

请帮忙谢谢

来自Comparator's documentation

A comparison function, which imposes a total ordering on some collection of objects. ...

来自 Comparator:compare's documentation:

...

Returns:

a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

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

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

首先,假设a > b。然后

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

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

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

最后,假设a == b。然后 a - b == b - a == 0 并且元素根据 Comparators.

是“相等的”