Java: 优先队列初始化
Java: PriorityQueue initializations
我试图理解启动优先级队列的以下行:
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);
与文档中的构造函数部分相比,
https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
我不知道它使用的是哪个构造函数。有人可以分享一下想法吗?
此外,是否有文档可以更好地 explain/define 语法 (a, b) -> b[1] - a[1]
...虽然我能猜到它的意思。
非常感谢!
您对 PriorityQueue
的构造使用了 1.7 中尚不存在的构造函数,这是您链接的 Java 文档的版本。
它使用为 Java 1.8 添加的 constructor that takes a Comparator
,它与您提供的 lambda 表达式相匹配。
Creates a PriorityQueue
with the default initial capacity and whose elements are ordered according to the specified comparator.
Since:
1.8
Lambda expressions 是在 Java 1.8 中引入的。在这里,基本上你有 2 个参数和表达式匹配到 functional 接口 --Comparator
.
因为 Java 8,there's a new constructor 有一个 Comparator
作为参数:
public PriorityQueue(Comparator<? super E> comparator)
因此使用 lambda 的初始化是有效的 Java 8+ 代码。
在优先级队列中,您基本上会放置用户定义的对象,因此优先级队列会询问您如何对这些对象进行排序(因为优先级队列就像堆数据结构——min/max 堆)所以我们给它一个比较器,它有一个比较方法,理想地用 ((a, b) -> b[1] - a[1]) 表示,这个方法给出 +ve, -ve 或基于 b > a , b 的零结果< a 或 b = a。它根据这个结果决定是否应该按升序或降序排列元素。
我试图理解启动优先级队列的以下行:
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);
与文档中的构造函数部分相比, https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
我不知道它使用的是哪个构造函数。有人可以分享一下想法吗?
此外,是否有文档可以更好地 explain/define 语法 (a, b) -> b[1] - a[1]
...虽然我能猜到它的意思。
非常感谢!
您对 PriorityQueue
的构造使用了 1.7 中尚不存在的构造函数,这是您链接的 Java 文档的版本。
它使用为 Java 1.8 添加的 constructor that takes a Comparator
,它与您提供的 lambda 表达式相匹配。
Creates a
PriorityQueue
with the default initial capacity and whose elements are ordered according to the specified comparator.Since:
1.8
Lambda expressions 是在 Java 1.8 中引入的。在这里,基本上你有 2 个参数和表达式匹配到 functional 接口 --Comparator
.
因为 Java 8,there's a new constructor 有一个 Comparator
作为参数:
public PriorityQueue(Comparator<? super E> comparator)
因此使用 lambda 的初始化是有效的 Java 8+ 代码。
在优先级队列中,您基本上会放置用户定义的对象,因此优先级队列会询问您如何对这些对象进行排序(因为优先级队列就像堆数据结构——min/max 堆)所以我们给它一个比较器,它有一个比较方法,理想地用 ((a, b) -> b[1] - a[1]) 表示,这个方法给出 +ve, -ve 或基于 b > a , b 的零结果< a 或 b = a。它根据这个结果决定是否应该按升序或降序排列元素。