[英]Custom Comparator - Java
我在使用Java中的“使用自定义比较器”时无法理解排序。
Queue<Integer> q = new PriorityQueue<>(arr.length, (a,b) -> ab);
给我升序排序,而
Queue<Integer> q = new PriorityQueue<>(arr.length, (a,b) -> ba);
给我降序排列。
我不明白这是怎么工作的? b
是传入元素,而a
已经在数组中,反之亦然吗? 另外,如何获得升序或降序?
如果ab > 0
,这意味着a>b
,那么b
不应该以a
的升序a
在b
前面吗?
基于比较的排序通过确定值是<
, =
还是>
来区分值。
例如3 < 4
4 = 4
4 > 3
。
Java比较器使用以下约定 :
cmp(a, b) < 0
表示a < b
cmp(a, b) = 0
意味着a = b
cmp(a, b) > 0
表示a > b
请注意,这意味着如果cmp(x, y) = x - y
,那么您将获得整数的常规排序。 您可以检查一下自己, cmp(x, y) = -(x- y) = y - x
给您相反的顺序。
排序时(或执行其他操作以按其顺序移动通用元素时,例如PriorityQueue),该算法将(反复)咨询比较器以确定是否已赋予它的值是<
, =
或>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.