簡體   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