Queue
Una lista se comporta como una cola si las inserciones las hacemos al final y las
extracciones las hacemos por el frente de la lista. También se las llama listas FIFO
(First In First Out - primero en entrar primero en salir)
Confeccionaremos un programa que permita utilizar la interfaz Queue y mediante la
clase LinkedList administre la lista tipo cola.
Programa:
import [Link];
import [Link];
public class PruebaQueue {
public static void main(String[] args) {
Queue<String> cola1 = new LinkedList<String>();
[Link]("Insertamos tres elementos en la cola:
juan, ana y luis");
[Link]("juan");
[Link]("ana");
[Link]("luis");
[Link]("Cantidad de elementos en la cola:" +
[Link]());
[Link]("Extraemos un elemento de la cola:" +
[Link]());
[Link]("Cantidad de elementos en la cola:" +
[Link]());
[Link]("Consultamos el primer elemento de la
cola sin extraerlo:" + [Link]());
[Link]("Cantidad de elementos en la cola:" +
[Link]());
[Link]("Extraemos uno a un cada elemento de la
cola mientras no este vacía:");
while (![Link]())
[Link]([Link]() + "-");
[Link]();
Queue<Integer> cola2 = new LinkedList<Integer>();
[Link](70);
[Link](120);
[Link](6);
[Link]("Imprimimos la cola de enteros");
for (Integer elemento : cola2)
[Link](elemento + "-");
[Link]();
[Link]("Borramos toda la cola");
[Link]();
[Link]("Cantidad de elementos en la cola de
enteros:" + [Link]());
}
}
La diferencia con respecto a la administración de pilas en Java es que para trabajar
con colas debemos crear un objeto de la clase LinkedList e implementar la interfaz
Queue:
Queue<String> cola1 = new LinkedList<String>();
La clase LinkedList implementa la interfaz Queue que es la que declara los método
principales para trabajar una cola.
Añadimos elementos al final de la cola mediante el método 'add':
[Link]("juan");
[Link]("ana");
[Link]("luis");
Para conocer la cantidad disponemos del método size():
[Link]("Cantidad de elementos en la cola:" +
[Link]());
Para extraer el nodo de principio de la lista tipo cola lo hacemos mediante el método
'poll':
[Link]("Extraemos un elemento de la cola:" +
[Link]());
Si queremos conocer el objeto primero de la cola sin extraerlo lo hacemos mediante
el método 'peek':
[Link]("Consultamos el primer elemento de la cola
sin extraerlo:" + [Link]());
Para conocer si la cola se encuentra vacía llamamos al método 'isEmpty':
while (![Link]())
[Link]([Link]() + "-");
Podemos utilizar un for para recorrer todos los elementos de la colección de tipo
Queue con la siguiente sintaxis (no se eliminan los elementos de la cola):
for (Integer elemento : cola2)
[Link](elemento + "-");
Para eliminar todos los elementos de una pila empleamos el método clear:
[Link]();
Más datos podemos conseguir visitando la documentación oficial de la
interfaz Queue.
PriorityQueue
Una variante de una cola clásica la implementa la clase PriorityQueue. Cuando se
agregan elementos a la cola se organiza según su valor, por ejemplo si es un
número se ingresan de menor a mayor.
Veamos un ejemplo como se organizan los valores en la cola con prioridad:
Programa:
import [Link];
public class PruebaPriorityQueue {
public static void main(String[] args) {
PriorityQueue<Integer> cola1 = new
PriorityQueue<Integer>();
[Link](70);
[Link](120);
[Link](6);
[Link]("Imprimimos la cola con prioridades de
enteros");
while (![Link]())
[Link]([Link]() + "-");
}
}
Creamos un objeto de la clase PriorityQueue que almacene objetos de la clase
Integer:
PriorityQueue<Integer> cola1 = new
PriorityQueue<Integer>();
Cargamos tres objetos en la cola de prioridad:
[Link](70);
[Link](120);
[Link](6);
Mediante un while comenzamos a recuperar los elementos de la cola con prioridad
y podemos comprobar que el primero de la cola es el que tiene el valor 6, luego el
70 y finalmente el 120:
while (![Link]())
[Link]([Link]() + "-");