¿Cuáles son algunos ejemplos de colas de prioridad en Java?

Priority Queue Java o PriorityQueue Class es una de esas clases que implementan la interfaz Queue. Extiende la clase AbstractQueue, que a su vez implementa Queue para obtener beneficios.

Aquí hay un diagrama jerárquico que explica las cosas de una manera mucho mejor:

PriorityQueue Class tiene la facilidad de usar Queue en Java. Sin embargo, sorprendentemente no ordena alrededor de elementos de manera FIFO. Ordena elementos según el orden natural del elemento o según el comparador suministrado.

Constructores y métodos de PriorityQueue

Estos son los constructores de PriorityQueue que puede usar:

  1. PriorityQueue ()
  2. PriorityQueue (Colección c)
  3. PriorityQueue (int capacidad)
  4. PriorityQueue (int capacidad, comparador comparador)
  5. PriorityQueue (PriorityQueue p)
  6. PriorityQueue (SortedSet s)

Los métodos de la clase PriorityQueue que puede usar son:

  1. agregar (Objeto e)
  2. claro()
  3. comparador ()
  4. contiene (Objeto o)
  5. iterador ()
  6. oferta (Objeto e)
  7. ojeada()
  8. encuesta()
  9. eliminar (Objeto o)
  10. Talla()
  11. toArray ()
  12. toArray (T [] a)

Ejemplo de Java de Priority Queue

Aquí un ejemplo sería útil:

PriorityQueue q = new PriorityQueue (5);
q.add (23);
q.add (1);
q.add (3);
q.add (7);
q. oferta (6); // hace lo mismo que agregar
System.out.println (q);

Observe aquí que el método offer () de Queue Interface hace lo mismo que add (). Si ejecuta el programa anterior, obtendrá:

[1, 6, 3, 23, 7]

Como puede ver, los elementos están ordenados según su ordenamiento natural. No sigue ninguna FIFO aquí.

Veamos qué otros métodos podemos poner allí para ver qué hacen. Agregue el siguiente código al código anterior:

System.out.println (“Jefe de la cola:” + q.poll ());
System.out.println (q);
q.clear ();
System.out.println (q);

La encuesta, como habíamos aprendido anteriormente, ayuda a extraer el encabezado de la cola al eliminarlo. El método clear () simplemente eliminará todo de la lista. Aquí está el resultado que obtendrá ahora:

[1, 6, 3, 23, 7]
Jefe de la cola: 1
[3, 6, 7, 23]
[]

Como ya habrás notado, el pedido es algo natural para ti. Puede ser engorroso para ti. Puede optar por utilizar un método llamado comparador () para proporcionar su propio pedido. Si no se proporciona un comparador y el orden es innato, le dará un resultado nulo. Como si aumenta lo siguiente en el código anterior:

Comparador c = q.comparator ();
System.out.println (c);

Si lo ejecutas ahora obtendrás:

nulo

Lea el artículo completo aquí: Cola en Java | Priority Queue Java | Java Queue FIFO – Parte 2

Desde la versión 5 Java tiene una clase integrada llamada PriorityQueue [1] que implementa una estructura de datos de cola prioritaria.

Esta cola ordena el elemento de acuerdo con su ordenamiento natural [2], pero también tiene un constructor que le permite pasarle un objeto Comparator que ordenará el objeto como desee.

public class PriorityQueueExample {
public static void main (String [] args) {
PriorityQueue priorityQueue = new PriorityQueue <> ();
Cadena a = “a”;
Cadena b = “b”;
Cadena z = “z”;
priorityQueue.add (a);
priorityQueue.add (b);
priorityQueue.add (z);
while (! priorityQueue.isEmpty ()) {
System.out.println (priorityQueue.poll ());
}
}
}

El código anterior producirá una salida:

una
si
z

Porque utiliza el orden natural de las cadenas, lo que significa orden alfabético. Pero agreguemos nuestro propio comparador que producirá un orden inverso:

clase pública UpdatedPriorityQueueExample {
public static void main (String [] args) {
PriorityQueue priorityQueue = new PriorityQueue <> (new StringFromZtoAComparator ());
Cadena a = “a”;
Cadena b = “b”;
Cadena z = “z”;
priorityQueue.add (b);
priorityQueue.add (a);
priorityQueue.add (z);
while (! priorityQueue.isEmpty ()) {
System.out.println (priorityQueue.poll ());
}
}

La clase estática StringFromZtoAComparator implementa el Comparador {

@Anular
public int compare (Cadena o1, Cadena o2) {
return Objects.compare (o2, o1, String :: compareTo);
}
}
}

Ahora pasamos nuestro Comparador en el constructor y la salida se convirtió en:

z
si
una

Notas al pie

[1] PriorityQueue (Java Platform SE 8)

[2] Comparable (Java Platform SE 8)

  • La clase java.util.PriorityQueue es una cola de prioridad ilimitada basada en un montón de prioridad
  • Los elementos de la cola prioritaria se ordenan de acuerdo con su ordenamiento natural, o mediante un comparador proporcionado en el momento de la construcción de la cola, según el constructor utilizado.
  • Una cola prioritaria no permite elementos nulos.
  • Una cola prioritaria que depende del orden natural tampoco permite la inserción de objetos no comparables.

Los ejemplos se han explicado en detalle en el siguiente video.