Очередь приоритетов имеет некоторый приоритет, назначенный каждому элементу. Элемент с наивысшим приоритетом отображается в верхней части очереди. Теперь это зависит от вас, как вы хотите, чтобы приоритет присваивался каждому из элементов. Если вы этого не сделаете, Java сделает это по умолчанию. Элементу с наименьшим значением присваивается наивысший приоритет, и поэтому он сначала удаляется из очереди. Если есть несколько элементов с одинаковым наивысшим приоритетом, связь нарушается произвольно. Вы также можете указать порядок с помощью Comparator в конструкторе PriorityQueue(initialCapacity, comparator)
Пример кода:
PriorityQueue<String> queue1 = new PriorityQueue<>();
queue1.offer("Oklahoma");
queue1.offer("Indiana");
queue1.offer("Georgia");
queue1.offer("Texas");
System.out.println("Priority queue using Comparable:");
while (queue1.size() > 0) {
System.out.print(queue1.remove() + " ");
}
PriorityQueue<String> queue2 = new PriorityQueue(4, Collections.reverseOrder());
queue2.offer("Oklahoma");
queue2.offer("Indiana");
queue2.offer("Georgia");
queue2.offer("Texas");
System.out.println("\nPriority queue using Comparator:");
while (queue2.size() > 0) {
System.out.print(queue2.remove() + " ");
}
Выход:
Priority queue using Comparable:
Georgia Indiana Oklahoma Texas
Priority queue using Comparator:
Texas Oklahoma Indiana Georgia
Иначе, Вы также можете определить пользовательский компаратор:
import java.util.Comparator;
public class StringLengthComparator implements Comparator<String>
{
@Override
public int compare(String x, String y)
{
//Your Own Logic
}
}