#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. Она права. Это происходит из-за стирания типа. Данный ответ не будет работать.