我试图实现堆排序算法。 我的问题是当我尝试将Elements插入我的PriorityQueue时,它只适用于一个元素。当我向其添加多个元素时,我会收到这些错误
Exception in thread "main" java.lang.ClassCastException: Element cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:652)
at java.util.PriorityQueue.siftUp(PriorityQueue.java:647)
at java.util.PriorityQueue.offer(PriorityQueue.java:344)
at java.util.PriorityQueue.add(PriorityQueue.java:321)
at PQHeap.insert(PQHeap.java:47)
at PQHeap.main(PQHeap.java:17)
这是我的元素类
public class Element {
public int key;
public Object data;
public Element(int i, Object o) {
this.key = i;
this.data = o;
}}
界面:
public interface PQ {
public Element extractMin();
public void insert(Element e);
}
这是生成堆的类。请注意,主类位于此处仅用于调试。当我只插入Element e时,它可以工作。但是当我插入f时,它也会给出上面的错误。
import java.util.*;
public class PQHeap implements PQ{
public static void main(String[] args) {
PQHeap hq = new PQHeap(5);
Element e = new Element(5, null);
hq.insert(e);
hq.insert(f);
for(int in = 0; in<hq.pq.size();in++){
System.out.println(hq.pq.remove());
}
}// end of main method
public PriorityQueue<Element> pq;
public PQHeap(int maxElms) {
this.pq = new PriorityQueue<Element>(maxElms);
}
@Override
public Element extractMin() {
Element min = pq.remove();
System.out.println(min.key);
return min;
}
@Override
public void insert(Element e) {
this.pq.add(e);
}