我可以在没有实现比较器的情况下在Java中使用Priority Queue吗?

时间:2014-09-19 20:08:14

标签: java priority-queue

如果我想创建节点的优先级队列,并且每个节点只有一个字段(即int val),我是否必须为优先级队列编写比较器?

4 个答案:

答案 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));