English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Queue (cola)

Queue es un tipo especial de colección que almacena elementos de manera FIFO (primero en entrar, primero en salir), exactamente opuesto a la colección Stack <T>. Contiene elementos en el orden de adición. C# incluye Queue<T> genérica y Queue de no genérica. Se recomienda usar la colección Queue<T> genérica.

Características de Queue <T>

  • Queue<T> es una colección FIFO (primero en entrar, primero en salir).  

  • está en el espacio de nombres System.Collection.Generic.

  • Queue<T> puede contener elementos de un tipo específico. Proporciona comprobación de tipo en tiempo de compilación y no realiza empaquetado/desempaquetado, porque es genérico.

  • Se puede agregar elementos utilizando el método Enqueue(). No se puede usar la inicialización de conjunto (collection-sintaxis initializer)

  • Se pueden utilizar los métodos Dequeue() y Peek() para recuperar elementos. No admite índices.

La siguiente imagen ilustra la colección Queue:

Crear cola

Puede crear un objeto especificando el tipo de elemento almacenado en Queue<T> mediante la especificación de un parámetro de tipo. El siguiente ejemplo utiliza el método Enqueue() para crear y agregar elementos a Queue<T>. La colección Queue permite valores nulos (para tipos de referencia) y valores repetidos.

Queue<int> callerIds = new Queue<int>();
callerIds.Enqueue(1);
callerIds.Enqueue(2);
callerIds.Enqueue(3);
callerIds.Enqueue(4);
foreach(var id in callerIds)
    Console.Write(id); //Imprimir1234

Atributos y métodos de Queue <T>

AtributoUso
CountDevuelve el número total de elementos en la cola.
MétodoUso
Enqueue(T)Agregar un elemento a la cola.
DequeueDevuelve un elemento desde el principio de la cola y lo elimina.
Peek(T)Devuelve el primer elemento de la cola sin eliminarlo.
Contains(T)Verificar si el elemento está en la cola
Clear()Eliminar todos los elementos de la cola.

Recuperar elementos de la cola

Los métodos Dequeue() y Peek() se utilizan para recuperar el primer elemento de la colección de cola. Dequeue() elimina y devuelve el primer elemento de una cola, ya que se almacenan elementos en una cola FIFO. Llamar al método Dequeue() en una cola vacía causará una excepción InvalidOperation. Por lo tanto, siempre verifique si el número total de elementos en la cola es mayor que cero antes de llamar a la cola.

Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("Número total de elementos: {0}", strQ.Count); //Salida 5
while(strQ.Count > 0){
    Console.WriteLine(strQ.Dequeue()); //Salida Hello
}
Console.WriteLine("Número total de elementos: {0}", strQ.Count); //Salida 0

El método Peek() siempre devuelve el primer elemento de la colección de cola sin eliminarlo. Llamar a este método en una cola vacía causará una excepción de tiempo de ejecución InvalidOperationException.

Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("Número total de elementos: {0}", strQ.Count); //Salida 5
if(strQ.Count > 0){
    Console.WriteLine(strQ.Peek()); //Salida H
    Console.WriteLine(strQ.Peek()); //Salida H
}
Console.WriteLine("Número total de elementos: {0}", strQ.Count); //Salida 0

Contains()

El método Contains() verifica si un elemento existe en la cola. Si el elemento especificado existe, devuelve true; de lo contrario, devuelve false.

Firma de Contains():

 bool Contains(object obj);
Queue<int> callerIds = new Queue<int>();
callerIds.Enqueue(1);
callerIds.Enqueue(2);
callerIds.Enqueue(3);
callerIds.Enqueue(4);
callerIds.Contains(2); //true
callerIds.Contains(10); //false