我想在自定义类上使用优先级队列(java.util.PriorityQueue)。据我所知,时Queue类使用可比接口,所以我实现它在我的自定义类:具有优先级队列的Java可比较对象
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)
我在做什么错?据我记得,这是我将如何实施可比较的。感谢所有的答案。
您确定'Comparable'中的'State'是正确的,而不是'java.lang.Thread.State'或'javax.swing.plaf.nimbus.State'例如? –
amit
@amit在这种情况下是否会打印该类的合格名称?看来这个问题可能是他忘了重新编译'State'。 – oldrinb
@oldrinb你说的对,就是这样!我认为它会编译,因为我在之前的几个地方使用了这个对象,但是我想它并没有出于某种原因。但分别编译它的伎俩。谢谢。 – Sefu