Java:PriorityQueue初始化

时间:2018-01-31 23:44:58

标签: java priority-queue

我正在尝试了解启动优先级队列的以下行:

PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);

与文档中的构造函数部分进行比较, https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

我无法弄清楚它使用的构造函数。有人可以分享一下这个想法吗?

此外,是否有一个文档可以更好地解释/定义语法(a, b) -> b[1] - a[1] ...虽然我可以猜到它的含义。

非常感谢!

3 个答案:

答案 0 :(得分:6)

PriorityQueue的构造使用1.7中尚未存在的构造函数,这是您链接的Javadoc的版本。

它使用为Java 1.8添加的constructor that takes a Comparator,它与您提供的lambda表达式匹配。

  

使用默认初始容量创建PriorityQueue,并根据指定的比较器对其元素进行排序。

     

<强>时间:

     

1.8

Java 1.8引入了

Lambda expressions。在这里,基本上你有2个参数和表达式与功能接口匹配 - Comparator

答案 1 :(得分:3)

从Java 8开始,there's a new constructor的参数为Comparator

public PriorityQueue(Comparator<? super E> comparator)

因此,使用lambda进行初始化是有效的Java 8+代码。

答案 2 :(得分:1)

在Priority Queue中,您实际上将放置用户定义的对象,因此要执行此操作,优先级队列会询问您如何对这些对象进行排序(因为优先级队列就像堆数据结构-最小/最大堆),因此我们给它一个Comparator其比较方法理想地由((a,b)-> b [1]-a [1])表示,该方法基于b> a,b

https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/util/PriorityQueue.java