У меня есть очередь приоритетов, содержащая элементы настраиваемого типа, называемого Process. Каждый процесс имеет 3 поля. Мне нужно иметь возможность получить Process из моей очереди приоритетов, которая имеет определенное значение для одного из своих полей. Как я могу это сделать? Кажется, что poll() всегда возвращает голову очереди.Приоритетная очередь в Java - получение определенного элемента
Вот мой код класса Process:
package SPN;
public class Process implements Comparable<Process> {
@Override
public int compareTo(Process proc) {
//implement this
return 0;
}
private int arrive_time= 0;
private int burst_time = 0;
private int remain_time = 0;
public Process (int arr_time, int bur_time) {
this.arrive_time = arr_time;
this.burst_time = bur_time;
}
public int getArrTime() {return arrive_time;}
public int getBurTime() {return burst_time;}
public int getRemTime() {return remain_time;}
}
В другом классе я создал очереди приоритетов под названием PRQ и добавлены процессы с разными значениями полей. Не беспокойтесь о неполном коде. Я просто не могу добавить все, потому что это будут страницы кода. Что-то вроде этого:
p1 = new Process(2, 10);
prq.add(p1);
p2 = new Process(1, 8);
prq.add(p2);
p3 = new Process(0, 11);
prq.add(p3);
Мне нужно, чтобы иметь возможность получить процесс p3, поскольку она имеет самый ранний arrive_time. Как я могу это сделать? Кажется, что восстанавливается и удаляется только глава очереди приоритетов. Не рекомендуйте использовать другую структуру данных, так как это не работает. Должна быть очередью приоритетов, потому что мне нужно сделать дополнительный выбор на основе других полей.
Process current = prq.poll();
Вы используете очереди приоритета, так почему бы не использовать компаратор? – RedSonja
@RedSonja прав, вы должны либо передать 'Comparator' в конструктор' ProirityQueue', либо правильно реализовать метод compareTo в классе 'Process'. Например. например 'return Integer.compare (arrival_time, proc.arrive_time);'. В этом случае голова очереди будет тем, что вам нужно. –
Где ваш метод compareTo? –