如果我想创建节点的优先级队列,并且每个节点只有一个字段(即int val
),我是否必须为优先级队列编写比较器?
答案 0 :(得分:3)
是。假设您的Node类是您的自定义类,Java不知道如何比较两个节点,即使它只有一个字段。因此,您需要做
class Node implements Comparable<Node> {
@Override
public compareTo(Node other) {
...
}
}
答案 1 :(得分:3)
优先级队列的元素按其自然顺序排序,或由比较器排序。如果您不想使用Comparator,请在Node类中实现Comparable。
答案 2 :(得分:0)
不需要Comparator
。您可以create a PriorityQueue
依赖于课程&#34;自然排序&#34;。
创建一个PriorityQueue,其默认初始容量(11)根据其natural ordering对其元素进行排序。
指向Comparable的链接。制作Node
班级工具Comparable<Node>
。然后,您可以使用PriorityQueue
而不使用Comparator
。
答案 3 :(得分:0)
您不一定需要在 Node 类中实现 Comparator。您可以使用 this answer 第一部分中详述的 lambda 表达式。我将修改该答案以适合您的问题。 为此,您必须为您拥有的字段创建一个 getter 方法。假设该方法称为“getVal()”,这应该无需实现 Comparator 即可工作。
PriorityQueue<Node> pq=
new PriorityQueue<Node>(Comparator.comparing(Node::getVal));