通用优先级队列Java实现

时间:2019-12-08 12:08:39

标签: java generics data-structures priority-queue

我需要在JAVA中实现通用优先级队列。请注意,键和值都是通用的。并且所有数据结构必须由用户实现。严格禁止使用Java集合或任何其他数据结构库。我使用数组将数据存储在队列中。但是显然不可能进行通用数组声明。我不能使用数组列表,因为那样我将不得不导入库。 并且代码必须在单个文件中。该类必须实现一个接口。 界面:

    public interface PQK<P extends Comparable<P>, T> {

    // Return the length of the queue
    int length();

    // Enqueue a new element. The queue keeps the k elements with the highest priority. In case of a tie apply FIFO.
    void enqueue(P pr, T e);

    // Serve the element with the highest priority. In case of a tie apply FIFO.
    Pair<P, T> serve();
}

我为实现给定接口的优先级队列编写的类:

public class PQKImp<P extends Comparable<P>, T> implements PQK<P, T> {

    private int size;
    private int capacity;
    private Pair<P , T>[] heap;

    public PQKImp(int k) {
        heap = new Pair<P,T>[k];
        this.capacity = k;
        this.size = 0;
    }

    public int length(){
        return size;
    }

    public void enqueue(P pr, T e){
        Pair<P ,T> pair = new Pair<P,T>(pr , e);
        heap[++size] = pair;
        int pos = size;
        while(pos!=1 && pair.first.compareTo(heap[pos/2].first)<0){
            heap[pos] = heap[pos/2];
            pos /= 2;
        }
        heap[pos] = pair;
    }

    public Pair<P,T> serve(){
        return heap[0];
    }
}

这是我得到的错误:

.\PQKImp.java:8: error: generic array creation
                heap = new Pair<P,T>[k];
                       ^
1 error

能否请您建议我一种在班级中存储数据的方法。 谢谢

0 个答案:

没有答案