繁体   English   中英

自定义比较器-Java

[英]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的升序ab前面吗?

基于比较的排序通过确定值是<=还是>来区分值。

例如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.

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