[英]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.