En el último tutorial, vimos cómo una cola atiende solicitudes basadas en FIFO (primero en entrar, primero en salir). Ahora la pregunta es: ¿Y si quisiéramos atender la solicitud en función de la prioridad en lugar de FIFO? En un escenario práctico, este tipo de solución sería preferible ya que es de naturaleza más dinámica y eficiente. Esto se puede hacer con la ayuda de PriorityQueue
, que atiende la solicitud en función de la prioridad que establezcamos mediante Comparator.
Ejemplo de Java PriorityQueue
En este ejemplo, estoy agregando algunas cadenas al archivo PriorityQueue
, durante la creación PriorityQueue
Pasé el comparador (llamado MyComparator
) al constructor PriorityQueue.
En MyComparator
java, clasifiqué las cadenas por su longitud, lo que significa la prioridad que establecí PriorityQueue
es la longitud de la cuerda. De esta manera, me aseguré de que la cadena más pequeña se sirviera primero en lugar de la cadena que agregué primero.
PriorityQueueExample.java
import java.util.PriorityQueue; public class PriorityQueueExample { public static void main(String[] args) { PriorityQueue<String> queue = new PriorityQueue<String>(15, new MyComparator()); queue.add("Tyrion Lannister"); queue.add("Daenerys Targaryen"); queue.add("Arya Stark"); queue.add("Petyr 'Littlefinger' Baelish"); /* * What I am doing here is removing the highest * priority element from Queue and displaying it. * The priority I have set is based on the string * length. The logic for it is written in Comparator */ while (queue.size() != 0) { System.out.println(queue.poll()); } } }
MyComparator.java
import java.util.Comparator; public class MyComparator implements Comparator<String> { @Override public int compare(String x, String y) { return x.length() - y.length(); } }
Producción:
Arya Stark Tyrion Lannister Daenerys Targaryen Petyr 'Littlefinger' Baelish
Métodos de la clase PriorityQueue
suma booleana (E y): Agrega el elemento en PriorityQueue.
vacío claro (): Este método elimina todos los elementos de PriorityQueue.
boolean contiene (Elemento y): Este método devuelve verdadero, si el elemento especificado existe en la cola.
Oferta booleana (E y): Como el método add ().
Y asoma (): Devuelve el encabezado (el primer elemento) de la cola.
Y encuesta (): Elimina la parte superior de la cola y la devuelve.
booleano eliminar (E y): Este método elimina el elemento especificado de la cola y devuelve verdadero si la eliminación se realiza correctamente. Si el elemento especificado no está presente en la cola, devuelve falso.
int tamaño (): Devuelve el tamaño de la cola.
objeto[] toArray (): Devuelve una matriz que contiene todos los elementos de la cola.
Referencia de método: Documentación oficial.