自定义比较器-Java

时间:2018-07-14 17:33:40

标签: sorting java

我在使用Java中的自定义比较器了解排序时遇到了麻烦。

import os trainDir = 'training/' testDir = 'testing/' array2D = [] for filename in os.listdir(trainDir,testDir): if filename.endswith('.txt'): array2D.append(str(filename)) print(array2D)

给我升序排序,而

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是否应该以升序位于b的前面?

1 个答案:

答案 0 :(得分:2)

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

例如>3 < 44 = 4

Java比较器use the convention

  • 4 > 3的意思是cmp(a, b) < 0
  • a < b的意思是cmp(a, b) = 0
  • a = b的意思是cmp(a, b) > 0

请注意,这意味着如果a > b,您将获得整数的常规排序。您可以检查一下自己cmp(x, y) = x - y是否提供了相反的顺序。

排序时(或执行其他操作以按顺序移动通用元素,例如PriorityQueue)时,该算法将(反复)咨询比较器以确定是否已将其赋予的值设为cmp(x, y) = -(x- y) = y - x<=