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

C# Queue (coda)

Queue è un tipo di raccolta speciale che memorizza gli elementi in modo FIFO (prima nell'ingresso, poi nell'uscita), contrariamente a Stack <T> raccolta. Contiene gli elementi nell'ordine di aggiunta. C# include Queue<T> generico e raccolta Queue non generica. Si consiglia di utilizzare la raccolta Queue<T> generica.

Caratteristiche di Queue <T>

  • Queue<T> è una raccolta FIFO (prima nell'ingresso, poi nell'uscita).  

  • Si trova nello spazio dei nomi System.Collection.Generic.

  • Queue<T> può contenere elementi di tipo specificato. Fornisce la verifica del tipo a compile-time e non esegue boxing/unboxing, poiché è generico.

  • Puoi aggiungere elementi utilizzando il metodo Enqueue(). Non è possibile utilizzare la sintassi di inizializzazione della raccolta (collection-initializer).

  • Puoi recuperare gli elementi utilizzando i metodi Dequeue() e Peek(). Non supporta gli indici.

La seguente immagine illustra la raccolta Queue:

Creare una coda

Puoi creare l'oggetto specificando il tipo di elemento del tipo di parametro specificato per Queue<T>. L'esempio seguente utilizza il metodo Enqueue () per creare e aggiungere elementi in Queue <T>. La raccolta Queue permette valori null (per i tipi di riferimento) e valori duplicati.

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); // Stampa 1234

Proprietà e metodi di Queue<T>

ProprietàUso
CountRestituire il numero totale di elementi nella coda.
MetodoUso
Enqueue(T)Aggiungere un elemento alla coda.
DequeueRestituire un elemento dall'inizio della coda e rimuoverlo.
Peek(T)Restituire il primo elemento della coda senza rimuoverlo.
Contains(T)Controllare se un elemento è nella coda
Clear()Eliminare tutti gli elementi dalla coda.

Recuperare un elemento dalla coda

I metodi Dequeue() e Peek() vengono utilizzati per recuperare l'elemento primo nella raccolta della coda. Dequeue() rimuove e restituisce il primo elemento della coda, poiché la coda è un'istanza di storage FIFO. Chiamare il metodo Dequeue() su una coda vuota solleva un'eccezione InvalidOperation. Pertanto, prima di chiamare la coda, verificare sempre se il numero totale di elementi è maggiore di zero.

Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("Numero totale di elementi: {0}", strQ.Count); // Output 5
while (strQ.Count > 0){
    Console.WriteLine(strQ.Dequeue()); // Output Hello
}
Console.WriteLine("Numero totale di elementi: {0}", strQ.Count); // Output 0

Il metodo Peek() restituisce sempre il primo elemento della raccolta della coda senza rimuoverlo. Chiamare questo metodo su una coda vuota solleva un'eccezione di runtime InvalidOperationException.

Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("Numero totale di elementi: {0}", strQ.Count); // Output 5
if(strQ.Count > 0){
    Console.WriteLine(strQ.Peek()); // Output H
    Console.WriteLine(strQ.Peek()); // Output H
}
Console.WriteLine("Numero totale di elementi: {0}", strQ.Count); // Output 0

Contains()

Il metodo Contains() verifica se l'elemento esiste nella coda. Se l'elemento specificato esiste, restituisce true, altrimenti restituisce false.

Contains() firma:

 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