PriorityQueue se usa cuando se supone que los objetos se procesarán en función de la prioridad . Se sabe que una Cola sigue el algoritmo First-In-First-Out, pero a veces se necesita procesar los elementos de la cola de acuerdo con la prioridad, ahí es cuando entra en juego PriorityQueue. PriorityQueue se basa en el montón de prioridad. Los elementos de la cola de prioridad se ordenan según el ordenamiento natural o mediante un comparador proporcionado en el momento de la construcción de la cola, según el constructor que se utilice.
Declaración:
public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable
donde E es el tipo de elementos retenidos en esta cola
Tipos de PriorityQueue
- Cola de máxima prioridad
- Cola de prioridad mínima
Ejemplo de cola de prioridad predeterminada
Java
// Java program to demonstrate the // working of default PriorityQueue import java.util.*; class PriorityQueueDemo { // Main Method public static void main(String args[]) { // Creating empty priority queue PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>(); // Adding items to the pQueue using add() pQueue.add(10); pQueue.add(20); pQueue.add(15); pQueue.add(5); // Printing the top element of PriorityQueue System.out.println(pQueue.peek()); // Printing the top element and removing it // from the PriorityQueue container System.out.println(pQueue.poll()); // Printing the top element again System.out.println(pQueue.peek()); } }
5 5 10
En Java, Priority Queue, por defecto implementa min Priority Queue. Si necesitamos cambiar el orden de Priority Queue de min a max Priority Queue, entonces usamos algunos métodos de la siguiente manera:
- Uso de las colecciones de comparación predeterminadas.reverseOrder()
- Uso de Comparador personalizado
- Usando
Uso de las colecciones de comparación predeterminadas.reverseOrder()
comportamiento del paquete java.util
Java
// Java program to demonstrate the // working of PriorityQueue in reverse order import java.util.*; class PriorityQueueDemo { // Main Method public static void main(String args[]) { // Creating empty priority queue PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>( Collections.reverseOrder()); // Adding items to the pQueue using add() pQueue.add(10); pQueue.add(20); pQueue.add(15); pQueue.add(5); // Printing the top element of PriorityQueue System.out.println(pQueue.peek()); // Printing the top element and removing it // from the PriorityQueue container System.out.println(pQueue.poll()); // Printing the top element again System.out.println(pQueue.peek()); } }
20 20 15
Método 2: usar un comparador personalizado
a
Java
// Java program to demonstrate the // working of PriorityQueue in reverse order import java.util.*; public class PriorityQueueDemo { // Main Method public static void main(String[] args) { // Creating empty priority queue // with custom Comparator PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>( new Comparator<Integer>() { // Compare method for place element in // reverse order public int compare(Integer a, Integer b) { if (a < b) return 1; if (a > b) return -1; return 0; } }); // Adding items to the pQueue using add() pQueue.add(10); pQueue.add(15); pQueue.add(20); pQueue.add(5); // Printing the top element of PriorityQueue System.out.println(pQueue.peek()); // Printing the top element and removing it // from the PriorityQueue container System.out.println(pQueue.poll()); // Printing the top element again System.out.println(pQueue.peek()); } }
20 20 15
Método 3: Usar
Java
// Java program to demonstrate the // working of PriorityQueue in reverse order import java.util.*; class PriorityQueueDemo { // Main Method public static void main(String args[]) { // Creating empty priority queue PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>((a, b) -> b - a); // Adding items to the pQueue using add() pQueue.add(10); pQueue.add(20); pQueue.add(15); pQueue.add(5); // Printing the top element of PriorityQueue System.out.println(pQueue.peek()); // Printing the top element and removing it // from the PriorityQueue container System.out.println(pQueue.poll()); // Printing the top element again System.out.println(pQueue.peek()); } }
20 20 15