java优先级队列插入(int p,E e)

时间:2011-11-02 17:45:17

标签: java priority-queue

我必须使用数组实现优先级队列。

如何将优先级附加到我想在数组中插入的元素。我希望对数组进行排序,以便在插入数组时对数组进行排序,其中数组的开头是具有最高优先级的元素,而end是具有最低优先级的元素。

我尝试创建一个具有键和值属性的私有类Entry,但我的插入仍然无效。有关如何入门的任何想法?

private class Entry{
    private int key;
    private E value;

    public Entry(int key, E value){
        this.key = key;
        this.value = value;
    }
    public int getKey() {
        return key;
    }

    public E getValue() {
        return value;
    }

}

public class PrioritetArraySorteret<E> implements PrioritetADT<E> {
    private int capacity = 5;
    private Entry S[];
    private int size;

    public PrioritetArraySorteret() {
       S = (E[]) new Object[capacity];
       size = 0;
    }

   @Override
   public void insert(int p, E e) {
      Entry temp = new Entry(p, e);

       int i = 0;
      while(i < S.length) {
        Entry t = S[i];
        if (t.compareTo(temp) == -1) {
            i++;
        } else {
            int j = i;
            S[j + 1] = S[j];
            j++;
        }

       }
       S[i] = temp;
       size++;
}

一个额外的问题

如何使用容量长度创建Entry数组?如果我在构造函数中键入Entry而不是E,则会出错。

线程“main”中的异常java.lang.ClassCastException:[Ljava.lang.Object;无法投射到[Lopgave5Prioritet.PrioritetArraySorteret $ Entry;)

1 个答案:

答案 0 :(得分:-2)

有不同的问题,但看起来不正确的是:

更改

S = (E[]) new Object[capacity];

S = new Entry[capacity];