代码之家  ›  专栏  ›  技术社区  ›  crazyy_photonn

自定义比较器-Java

  •  0
  • crazyy_photonn  · 技术社区  · 6 年前

    我很难理解在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 > 0 ,这意味着 a>b ,所以不应该 位于 按升序排列?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Curtis Fenner    6 年前

    基于比较的排序通过确定值是否 < 我是说, = > 是的。

    例如, 3 < 4 我是说, 4 = 4 , 4 > 3 是的。

    Java比较器 use the convention 那个

    • 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)时,算法将(反复)咨询比较器,以确定是否已经给出了 < ,请 = > .