Java: PriorityQueue的初始化

5
我正在尝试理解以下代码行,它初始化了一个优先队列:
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);

与文档中的构造函数部分相比,我无法确定它使用哪个构造函数。有人能分享一下思路吗?
此外,是否有一份文件可以更好地解释/定义语法 `(a, b) -> b[1] - a[1]` ...尽管我猜想它的含义。
非常感谢!

2
看起来队列中提供了一个“比较器”,以便按正确的顺序添加项目。Java 8的“PriorityQueue”实现允许使用该构造函数形式。 - Bob Dalgleish
1
你正在查看错误版本的javadoc。很明显这是Java 8中的一个实体。 - Andrey Tyukin
2
每当看到一个lambda表达式"->",至少需要Java 1.8来进行编译! - Jacob G.
3个回答

6
您构建的PriorityQueue使用了一个在您提供的Javadocs版本1.7中还不存在的构造函数。
它使用了一个需要Java 1.8才添加的Comparator构造函数,该构造函数与您提供的lambda表达式相匹配。

创建一个具有默认初始容量并根据指定比较器排序其元素的PriorityQueue

自从:

1.8

Lambda表达式是在Java 1.8中引入的。这里,基本上您有两个参数和一个表达式,它们与一个功能性接口--Comparator相匹配。

3
自从Java 8以来,有一个新的构造函数,它有一个Comparator作为参数:
public PriorityQueue(Comparator<? super E> comparator)

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

1

在优先队列中,您将基本上放置用户定义的对象,为此,优先队列会询问您如何对这些对象进行排序(因为优先队列就像是堆数据结构--最小/最大堆),因此我们给它一个比较器,该比较器具有理想情况下由 ((a,b) -> b[1] - a[1]) 表示的比较方法,该方法根据 b > a , b < a 或 b = a 给出正数、负数或零的结果。通过这个结果,它决定是否按升序或降序排列元素。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接