我想在自定義類上使用優先級隊列(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