【问题标题】:Custom Comparator - Java自定义比较器 - Java
【发布时间】:2018-12-22 20:10:39
【问题描述】:

我无法理解在 Java 中使用自定义比较器进行排序。

Queue<Integer> q = new PriorityQueue<>(arr.length, (a,b) -> a-b);

给我升序排序,而

Queue<Integer> q = new PriorityQueue<>(arr.length, (a,b) -> b-a);

给我一​​个降序排序。

我无法理解的是这是如何工作的? b 是传入元素,a 是否已经在数组中,反之亦然?另外,升序或降序是如何获得的?

如果a-b &gt; 0,这意味着a&gt;b,那么b不应该按升序排列在a前面吗?

【问题讨论】:

    标签: sorting java


    【解决方案1】:

    基于比较的排序通过确定它们是否为&lt;、= 或&gt; 来区分值。

    例如,3 &lt; 4、4 = 4、4 &gt; 3。

    Java 比较器 use the convention 那

    • cmp(a, b) &lt; 0 表示 a &lt; b
    • cmp(a, b) = 0 表示a = b
    • cmp(a, b) &gt; 0 表示 a &gt; b

    请注意,这意味着如果cmp(x, y) = x - y,那么您将获得整数的正常排序。您可以自行检查cmp(x, y) = -(x- y) = y - x 是否为您提供了相反的顺序。

    在排序时(或执行其他按顺序移动通用元素的操作,例如 PriorityQueue),算法将(反复)咨询比较器以确定其给出的值是否为&lt;、@987654337 @,或&gt;。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-31
      • 2017-11-02
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多