Java 中的比较器和 PriorityQueue 是如何工作的?

Posted

技术标签:

【中文标题】Java 中的比较器和 PriorityQueue 是如何工作的?【英文标题】:How comparator and PriorityQueue in Java works? 【发布时间】:2021-02-25 06:28:14 【问题描述】:

这是我用来逆转 Java 中 priorityQueue 正常工作的代码。 但我不明白我放在括号内的 lambda 函数做了什么。有人可以解释一下。 PriorityQueue pq = new PriorityQueue((a,b) -> b - a);

import java.util.*;
public class Main

    public static void main(String[] args) 
        PriorityQueue<Integer> pq = new PriorityQueue<>((a,b) -> b - a);
        
        pq.add(2);
        pq.add(4);
        pq.add(1);
        pq.add(100);
        
        System.out.println(pq);
        System.out.println(pq.remove());
        System.out.println(pq.remove());
        System.out.println(pq.remove());
        System.out.println(pq.remove());
        
    
 

【问题讨论】:

【参考方案1】:

比较函数是一个函数,当第一个参数应该在第二个之前排序时,必须返回任何小于0的值,任何大于0的值,当第二个参数应该在第一个之前排序时,@987654323 @如果两者在排序上是等价的。

它在PriorityQueue内部使用,通过将其结果与0进行比较来确定元素的相对顺序。

【讨论】:

以上是关于Java 中的比较器和 PriorityQueue 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

试图覆盖 Java 中 PriorityQueue 的现有比较器

Java中的Collection和Map--PriorityQueue

Java数据结构及算法实战系列011:数组实现的优先级队列PriorityQueue

Java数据结构及算法实战系列011:数组实现的优先级队列PriorityQueue

Java数据结构及算法实战系列011:数组实现的优先级队列PriorityQueue

Java之集合PriorityQueue