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

C# Queue (Queue)

Queue is a special type of collection that stores elements in a FIFO (First In, First Out) manner, which is completely opposite to the Stack <T> collection. It contains elements in the order they were added. C# includes both generic Queue<T> and non-generic Queue collections. It is recommended to use the generic Queue<T> collection.

Queue <T> features

  • Queue<T> is a FIFO (First In, First Out) collection.  

  • It is under the System.Collection.Generic namespace.

  • Queue<T> can contain elements of a specified type. It provides compile-time type checking and does not perform boxing/unboxing because it is generic.

  • Elements can be added using the Enqueue() method. It is not possible to use collection initialization(collection-initializer syntax.

  • Elements can be retrieved using the Dequeue() and Peek() methods. It does not support indexers.

Das folgende Diagramm zeigt die Queue-Sammlung:

Warteschlange erstellen

Sie können Objekte erstellen, indem Sie für den Typ der von Queue<T> gespeicherten Elemente einen Typparameter angeben. Der folgende Beispiel verwendet die Enqueue()-Methode, um Elemente in Queue<T> zu erstellen und hinzuzufügen. Die Queue-Sammlung ermöglicht null (für Referenztypen) und wiederholte Werte.

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); //Drucken1234

Eigenschaften und Methoden der Queue<T>

EigenschaftVerwendung
CountGibt die Gesamtzahl der Elemente in der Warteschlange zurück.
MethodeVerwendung
Enqueue(T)Ein Element zur Warteschlange hinzufügen.
DequeueEin Element vom Anfang der Warteschlange zurückgeben und es aus der Warteschlange löschen.
Peek(T)Das erste Element der Warteschlange zurückgeben, ohne es zu löschen.
Contains(T)Überprüfen, ob ein Element in der Warteschlange vorhanden ist
Clear()Alle Elemente aus der Warteschlange löschen.

Element aus der Warteschlange abrufen

Die Dequeue() und Peek()-Methoden werden verwendet, um den ersten Element in der Sammlung der Warteschlange abzurufen. Dequeue() entfernt und gibt das erste Element zurück, da die Elemente in einer FIFO-Reihenfolge in der Warteschlange gespeichert werden. Der Aufruf der Dequeue()-Methode auf einer leeren Warteschlange führt zu einer InvalidOperation-Exception. Daher sollten Sie immer überprüfen, ob die Anzahl der Elemente in der Warteschlange größer als null ist, bevor Sie die Warteschlange aufrufen.

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

Die Peek()-Methode gibt immer das erste Element der Sammlung der Warteschlange zurück und löscht es nicht. Der Aufruf dieser Methode auf einer leeren Warteschlange führt zu einer Laufzeitexception InvalidOperationException.

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

Contains()

Die Contains() Methode überprüft, ob ein Element in der Warteschlange existiert. Wenn das angegebene Element existiert, wird true zurückgegeben,否则 wird false zurückgegeben.

Contains() Signatur:

 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