无法在PriorityQueue中插入多个元素

时间:2016-03-06 19:47:00

标签: heapsort

我试图实现堆排序算法。 我的问题是当我尝试将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);

    }

0 个答案:

没有答案