在 Java 中将比较器与优先队列一起使用
Using Comparator with Priority Queue in Java
请帮助我处理以下代码行-(在 Java 中)
PriorityQueue<Node> pq
= new PriorityQueue<>(
new Comparator<Node>() {
public int compare(Node a, Node b)
{
return a.data - b.data;
}
});
请解释以上代码行中到底发生了什么,以及在创建优先级队列对象时使用了哪种类型的构造函数。还请解释当返回 a.data-b.data 时,上述代码中的排序是如何发生的。
(节点与链表相关)
我认为查看 Java 文档可以回答您的问题:
要创建 PriorityQueue
,请使用 PriorityQueue
-class.
的构造函数
如果我们在 Java 11 (PriorityQueue (Java SE 11 & JDK 11) - Constructor Summary) 的文档中查看 PriorityQueue
的构造函数摘要,您正在使用此摘要的第 5 个构造函数。
本文档中的 Jumping to that constructor 向我们展示了以下内容:
public PriorityQueue(Comparator<? super E> comparator)
Creates a PriorityQueue with the default initial capacity and whose elements are ordered according to the specified comparator.
Parameters:
comparator - the comparator that will be used to order this priority queue. If null, the natural ordering of the elements will be used.
Since:
1.8
现在让我们看一下您在 PriorityQueue
.
的构造函数中用作参数的 Comparator
当我们查看文档 (Comparator (Java SE 11 & JDK 11 )) 时,我们发现 Comparator
不是 class,它是一个接口。
您在代码示例中所做的是创建一个匿名class。匿名 classes 使您能够同时声明和实例化一个 class。
这意味着您正在声明一个实现接口 Comparator
的新 class,并且您正在覆盖方法 public int compare(Node a, Node b)
。在同一步骤中,您将创建此匿名 class 的新实例并将此实例传递给 PriorityQueue
.
的构造函数
在这里您可以找到更多关于匿名 classes 的信息:Anonymous Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects)
请帮助我处理以下代码行-(在 Java 中)
PriorityQueue<Node> pq
= new PriorityQueue<>(
new Comparator<Node>() {
public int compare(Node a, Node b)
{
return a.data - b.data;
}
});
请解释以上代码行中到底发生了什么,以及在创建优先级队列对象时使用了哪种类型的构造函数。还请解释当返回 a.data-b.data 时,上述代码中的排序是如何发生的。 (节点与链表相关)
我认为查看 Java 文档可以回答您的问题:
要创建 PriorityQueue
,请使用 PriorityQueue
-class.
如果我们在 Java 11 (PriorityQueue (Java SE 11 & JDK 11) - Constructor Summary) 的文档中查看 PriorityQueue
的构造函数摘要,您正在使用此摘要的第 5 个构造函数。
Jumping to that constructor 向我们展示了以下内容:
public PriorityQueue(Comparator<? super E> comparator)
Creates a PriorityQueue with the default initial capacity and whose elements are ordered according to the specified comparator.
Parameters:
comparator - the comparator that will be used to order this priority queue. If null, the natural ordering of the elements will be used.
Since: 1.8
现在让我们看一下您在 PriorityQueue
.
Comparator
当我们查看文档 (Comparator (Java SE 11 & JDK 11 )) 时,我们发现 Comparator
不是 class,它是一个接口。
您在代码示例中所做的是创建一个匿名class。匿名 classes 使您能够同时声明和实例化一个 class。
这意味着您正在声明一个实现接口 Comparator
的新 class,并且您正在覆盖方法 public int compare(Node a, Node b)
。在同一步骤中,您将创建此匿名 class 的新实例并将此实例传递给 PriorityQueue
.
在这里您可以找到更多关于匿名 classes 的信息:Anonymous Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects)