为什么我不能添加 PriorityQueue?

Nik*_*o H 1 java priority-queue nodes

我在将对象节点添加到 PriorityQueue 时遇到了麻烦,我不知道为什么。当我添加节点 a 时,它没有问题。

PriorityQueue<Node> q = new PriorityQueue<Node>();
Node a = new Node('a', 1);

q.add(a);
Run Code Online (Sandbox Code Playgroud)

但是如果我添加第二个节点,它会抛出一个异常,说“java.lang.ClassCastException:节点不能被强制转换为 java.lang.Comparable”

PriorityQueue<Node> q = new PriorityQueue<Node>();
Node a = new Node('a', 1);
Node b = new Node('b', 2);

q.add(a);
q.add(b);
Run Code Online (Sandbox Code Playgroud)

我的节点类如下:

public class Node {
    public int count;
    public char character;
    public Node left;
    public Node right;

    public Node(char character, int count) {
        this(character, count, null, null);
    }

    public Node(char character, int count, Node left, Node right) {
        this.count = count;
        this.character = character;
        this.left = left;
        this.right = right;
    }

    public int compareTo(Node other) {
        return this.count - other.count;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我只是困惑为什么它可以添加节点 a 但不能添加节点 b。我查了 ClassCastException 是什么,我真的没有看到我做了那种异常,因为我将一个类型 Node 添加到一个 Nodes 类型的 PriorityQueue 中。我将不胜感激任何帮助。谢谢!

fpe*_*ini 5

第一个有效,因为它是唯一的。从第二个开始,它需要将其与第一个进行比较,以了解将其放在优先级队列的何处。您需要在 Node 类上实现接口 Comparable 并实现 compare (a, b) 方法。然后优先级队列将知道如何正确排序项目。