我正在尝试在自定义类上使用优先级队列(java.util.PriorityQueue)。我知道 PriorityQueue 类使用 Comparable 接口,所以我在我的自定义类中实现了它:
public class State implements Comparable<State> {
public int val;
public State(){
this.val = 0;
}
public int compareTo(State other){
return this.val - other.val;
}
}
为了使用队列,我做了:
PriorityQueue<State> q = new PriorityQueue<State>();
q.add(myState1);
q.add(myState2);
// etc.
它编译正确,但在运行时出现此异常:
Exception in thread "main" java.lang.ClassCastException: State cannot be cast to
java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(Unknown Source)
at java.util.PriorityQueue.siftUp(Unknown Source)
at java.util.PriorityQueue.offer(Unknown Source)
at java.util.PriorityQueue.add(Unknown Source)
at MapTable.search(MapTable.java:308)
at Map.main(Map.java:67)
我究竟做错了什么?据我所知,这就是我实现可比性的方式。感谢所有的答案。