вставка очереди приоритета java (int p, E e)

#java #priority-queue

#java #приоритет-очередь

Вопрос:

Я должен реализовать очередь приоритетов с использованием массива.

Как мне присвоить приоритет элементу, который я хочу вставить в массив. Я хочу, чтобы массив был отсортирован, чтобы при вставке массива он сохранялся отсортированным, где началом массива является элемент с наивысшим приоритетом, а концом — элемент с наименьшим приоритетом.

Я попытался создать запись частного класса с атрибутом ключа и значения, но моя вставка все еще не работает. Есть идеи о том, как начать?

 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 вместо E в конструкторе.

Исключение в потоке «main» java.lang.Исключение ClassCastException: [Ljava.lang.Объект; не может быть приведен к [Lopgave5Prioritet .PrioritetArraySorteret$запись;)

Комментарии:

1. Я предлагаю вам написать что-то, что сначала компилируется, и основываться на этом.

2. @Kowser — ну и что? Хороший вопрос, хотя в основном есть 2 вопроса. Хорошим предложением, если вы хотите получить ответ, было бы разделить его на вопросы Stackoverflow для достижения наилучшего результата 🙂

3. @MathiasLykkegaardLorenzen если это домашнее задание, то цель SO — помочь спрашивающему понять, как выполнить реализацию и т. Д., Вместо того, Чтобы указывать им в направлении API или чего-то еще, чтобы остановить их босса, дышащего им в спину 🙂

Ответ №1:

Существуют разные проблемы, но одна из них выглядит неправильной::

Изменить

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

Для

 S = new Entry[capacity];
  

Комментарии:

1. Он не может принять новую запись [емкость]. это говорит о том, что что-то об этом не соответствует общему типу.

2. Она права. Это происходит из-за стирания типа. Данный ответ не будет работать.