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

C# Queue (Fila)

Queue é um tipo especial de coleção que armazena elementos de maneira FIFO (first in, first out), o que é completamente oposto ao conjunto Stack <T>. Ele contém elementos na ordem de adição. O C# inclui Queue<T> genérica e Queue não genérica. Recomenda-se usar a coleção Queue<T> genérica.

características de Queue <T>

  • Queue<T> é uma coleção FIFO (first in, first out).  

  • está sob o espaço de nomes System.Collection.Generic.

  • Queue<T> pode conter elementos do tipo especificado. Ele oferece verificação de tipo no tempo de compilação e não realiza empacotamento/desempacotamento, pois é genérico.

  • Pode usar o método Enqueue() para adicionar elementos. Não é possível usar inicialização de conjunto(collection-sintaxe initializer)

  • Pode usar os métodos Dequeue() e Peek() para recuperar elementos. Não suporta indexadores.

A figura a seguir ilustra a coleção Queue:

Criar fila

Você pode criar objetos que armazenam elementos do tipo especificado para Queue<T> usando parâmetros de tipo. O exemplo a seguir usa o método Enqueue() para criar e adicionar elementos à Queue <T>. A coleção Queue permite valores nulos (para tipos de referência) e 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 e métodos da Queue <T>

AtributoUso
CountRetorna o número total de elementos na fila.
MétodoUso
Enqueue(T)Adicionar um item à fila.
DequeueRetorna um item do início da fila e o remove.
Peek(T)Retorna o primeiro item da fila sem removê-lo.
Contains(T)Verificar se o item está na fila
Clear()Remover todos os itens da fila.

Recuperar elementos da fila

Os métodos Dequeue() e Peek() são usados para recuperar o primeiro elemento da coleção de fila. O Dequeue() remove e retorna o primeiro elemento da fila, pois a fila armazena elementos em ordem FIFO. Chamar o método Dequeue() em uma fila vazia provocará uma exceção InvalidOperation. Portanto, sempre verifique se o número total de itens na fila é maior que zero antes de chamar a fila.

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); //Saída 5
while(strQ.Count > 0){
    Console.WriteLine(strQ.Dequeue()); //Saída Hello
}
Console.WriteLine("Número total de elementos: {0}", strQ.Count); //Saída 0

O método Peek() sempre retorna o primeiro item da coleção de fila, sem removê-lo da fila. Chamar esse método em uma fila vazia provocará uma exceção de tempo de execução 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); //Saída 5
if(strQ.Count > 0){
    Console.WriteLine(strQ.Peek()); //Saída H
    Console.WriteLine(strQ.Peek()); //Saída H
}
Console.WriteLine("Número total de elementos: {0}", strQ.Count); //Saída 0

Contains()

O método Contains() verifica se um item existe na fila. Se o item especificado existir, retorna true, caso contrário, retorna false.

Assinatura do 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