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 中。我将不胜感激任何帮助。谢谢!
第一个有效,因为它是唯一的。从第二个开始,它需要将其与第一个进行比较,以了解将其放在优先级队列的何处。您需要在 Node 类上实现接口 Comparable 并实现 compare (a, b) 方法。然后优先级队列将知道如何正确排序项目。
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |