Kolejka priorytetowa wyjmuje element o najwyższym (lub najniższym) priorytecie, a nie najstarszy. Zwykle jest zaimplementowana kopcem, więc wstawienie/usunięcie to O(log n).
import java.util.PriorityQueue;
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(5);
pq.add(1);
System.out.println(pq.poll()); // 1Kolejka priorytetowa to ADT, gdzie zdejmujesz element o „najlepszym” priorytecie (min lub max). Najczęściej implementuje się ją kopcem binarnym.
Typowe koszty dla kopca binarnego:
To idealna struktura, gdy wielokrotnie potrzebujesz „następnego najlepszego” elementu, a zbiór w trakcie się zmienia.
// Min-heap po pierwszym polu (priorytet)
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> Integer.compare(a[0], b[0]));
pq.add(new int[]{5, 42});
pq.add(new int[]{1, 7});
int[] next = pq.poll(); // [1, 7]