繁体   English   中英

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 如何使其下降而 p1.score - p2.score 使其上升

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

请帮忙谢谢

来自Comparator的文档

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

来自Comparator:compare的文档

...

返回:

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

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

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

首先,假设a > b 然后

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

接下来,假设a < b 然后

  • a - b < 0从而a小于“” b根据asc
  • b - a > 0 ,从而a大于“” b根据desc

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM