如何解决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:compare
's documentation:
...
返回:
第一个参数小于,等于或大于第二个参数时,为负整数,零或正整数。
因此,Comparator
仅定义顺序。由排序算法决定是否使用此信息并实际对数据结构进行排序。如果我们看一下Quicksort和Merge Sort的工作方式,我们会发现这些算法只需要知道某个元素a
是小于,等于还是大于{{1} },这是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
是“相等的”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。