import java.util.*;
class Huffman {
int a;
public Huffman(int i)
{
a = i;
}
}
class PriorityQueueDemo implements Comparator<Huffman>
{
public int compare(Huffman ab, Huffman cd)
{
if(ab.a>cd.a)
{
return 1;
}
return 0;
}
public static void main(String[] args)
{
PriorityQueue<Huffman> HuffQueue = new PriorityQueue<Huffman>();
Huffman ab = new Huffman(10);
HuffQueue.offer(ab);
ab = new Huffman(50);
HuffQueue.offer(ab);
ab = new Huffman(20);
HuffQueue.offer(ab);
ab = new Huffman(60);
HuffQueue.offer(ab);
while(HuffQueue.size() > 0)
System.out.println(HuffQueue.remove());
}
}
以下代码有什么问题!它会生成以下例外:
Exception in thread "main" java.lang.ClassCastException: Huffman 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 PriorityQueueDemo.main(Huffman.java:34)
答案 0 :(得分:4)
您需要实施Comparable
接口
依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。
或者你需要在构造函数中传递比较器
public PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
如下所示
PriorityQueue<Huffman> HuffQueue = new PriorityQueue<Huffman>(10, new Comparator<Huffman>(){
@Override
public int compare(Huffman ab, Huffman cd){
if(ab.a>cd.a)
{
return 1;
}
return 0;
}
});
答案 1 :(得分:0)
异常状态Hufmann
类不是Comparable
,未按java.util.Comparable
的要求实施PriorityQueue
。将Comparable
实施到Huffman
中,以便进行比较,并在队列中获得适当的优先级。 http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html中解释了Comparable
,需要compareTo(T o) : int
方法实现。