Queue Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt eine FIFO-Auflistung (First-In-First-Out) von Objekten dar.
public ref class Queue : System::Collections::ICollection
public ref class Queue : ICloneable, System::Collections::ICollection
public class Queue : System.Collections.ICollection
public class Queue : ICloneable, System.Collections.ICollection
[System.Serializable]
public class Queue : ICloneable, System.Collections.ICollection
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class Queue : ICloneable, System.Collections.ICollection
type Queue = class
interface ICollection
interface IEnumerable
type Queue = class
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
type Queue = class
interface ICollection
interface IEnumerable
interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Queue = class
interface ICollection
interface IEnumerable
interface ICloneable
Public Class Queue
Implements ICollection
Public Class Queue
Implements ICloneable, ICollection
- Vererbung
-
Queue
- Attribute
- Implementiert
Beispiele
Das folgende Beispiel zeigt, wie Sie Werte erstellen und zu einem Queue hinzufügen und wie die Werte ausgegeben werden.
using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{
// Creates and initializes a new Queue.
Queue^ myQ = gcnew Queue;
myQ->Enqueue( "Hello" );
myQ->Enqueue( "World" );
myQ->Enqueue( "!" );
// Displays the properties and values of the Queue.
Console::WriteLine( "myQ" );
Console::WriteLine( "\tCount: {0}", myQ->Count );
Console::Write( "\tValues:" );
PrintValues( myQ );
}
void PrintValues( IEnumerable^ myCollection )
{
IEnumerator^ myEnum = myCollection->GetEnumerator();
while ( myEnum->MoveNext() )
{
Object^ obj = safe_cast<Object^>(myEnum->Current);
Console::Write( " {0}", obj );
}
Console::WriteLine();
}
/*
This code produces the following output.
myQ
Count: 3
Values: Hello World !
*/
using System;
using System.Collections;
public class SamplesQueue {
public static void Main() {
// Creates and initializes a new Queue.
Queue myQ = new Queue();
myQ.Enqueue("Hello");
myQ.Enqueue("World");
myQ.Enqueue("!");
// Displays the properties and values of the Queue.
Console.WriteLine( "myQ" );
Console.WriteLine( "\tCount: {0}", myQ.Count );
Console.Write( "\tValues:" );
PrintValues( myQ );
}
public static void PrintValues( IEnumerable myCollection ) {
foreach ( Object obj in myCollection )
Console.Write( " {0}", obj );
Console.WriteLine();
}
}
/*
This code produces the following output.
myQ
Count: 3
Values: Hello World !
*/
Imports System.Collections
Public Class SamplesQueue
Public Shared Sub Main()
' Creates and initializes a new Queue.
Dim myQ As New Queue()
myQ.Enqueue("Hello")
myQ.Enqueue("World")
myQ.Enqueue("!")
' Displays the properties and values of the Queue.
Console.WriteLine("myQ")
Console.WriteLine(" Count: {0}", myQ.Count)
Console.Write(" Values:")
PrintValues(myQ)
End Sub
Public Shared Sub PrintValues(myCollection As IEnumerable)
Dim obj As [Object]
For Each obj In myCollection
Console.Write(" {0}", obj)
Next obj
Console.WriteLine()
End Sub
End Class
' This code produces the following output.
'
' myQ
' Count: 3
' Values: Hello World !
Hinweise
Diese Klasse implementiert eine Warteschlange als zirkuläres Array. In einem Queue gespeicherte Objekte werden an einem Ende eingefügt und vom anderen entfernt.
Wichtig
Es wird nicht empfohlen, die Queue
-Klasse für neue Entwicklungen zu verwenden. Stattdessen wird empfohlen, die generische Queue<T> Klasse zu verwenden. Weitere Informationen finden Sie unter Nicht generische Sammlungen sollten nicht auf GitHub verwendet werden.
Warteschlangen und Stapel sind nützlich, wenn Sie temporären Speicher für Informationen benötigen. Das heißt, wenn Sie ein Element nach dem Abrufen des Werts verwerfen möchten. Verwenden Sie Queue , wenn Sie auf die Informationen in der gleichen Reihenfolge zugreifen müssen, in der sie in der Sammlung gespeichert sind. Verwenden Sie Stack , wenn Sie in umgekehrter Reihenfolge auf die Informationen zugreifen müssen. Verwenden Sie ConcurrentQueue<T> oder ConcurrentStack<T> , wenn Sie von mehreren Threads gleichzeitig auf die Sammlung zugreifen müssen.
Drei Standard Vorgänge können für ein Queue und seine Elemente ausgeführt werden:
Peek gibt das älteste Element zurück, das sich am Anfang von Queue befindet, entfernt es jedoch nicht aus dem Queue.
Die Kapazität eines Queue ist die Anzahl der Elemente, die enthalten Queue können. Wenn Elemente zu einem Queuehinzugefügt werden, wird die Kapazität automatisch bei Bedarf durch Neuzuweisung erhöht. Die Kapazität kann verringert werden, indem Sie aufrufen TrimToSize.
Der Wachstumsfaktor ist die Zahl, mit der die aktuelle Kapazität multipliziert wird, wenn eine größere Kapazität erforderlich ist. Der Wachstumsfaktor wird bestimmt, wenn der Queue erstellt wird. Der Standardwachstumsfaktor ist 2.0. Die Kapazität des Queue wird immer mindestens um mindestens vier erhöht, unabhängig vom Wachstumsfaktor. Beispielsweise wird ein Queue mit einem Wachstumsfaktor von 1,0 die Kapazität immer um vier erhöht, wenn eine größere Kapazität erforderlich ist.
Queue akzeptiert null
als gültigen Wert und lässt doppelte Elemente zu.
Die generische Version dieser Sammlung finden Sie unter System.Collections.Generic.Queue<T>
Konstruktoren
Queue() |
Initialisiert eine neue, leere Instanz der Queue-Klasse, die anfänglich über die Standardkapazität verfügt und den Standardzuwachsfaktor verwendet. |
Queue(ICollection) |
Initialisiert eine neue Instanz der Queue-Klasse, die aus der angegebenen Auflistung kopierte Elemente enthält und über eine der Anzahl der kopierten Elemente entsprechende anfängliche Kapazität verfügt sowie den Standardzuwachsfaktor verwendet. |
Queue(Int32) |
Initialisiert eine neue, leere Instanz der Queue-Klasse mit der angegebenen anfänglichen Kapazität und dem Standardzuwachsfaktor. |
Queue(Int32, Single) |
Initialisiert eine neue, leere Instanz der Queue-Klasse mit den angegebenen Werten für die anfängliche Kapazität und den Zuwachsfaktor. |
Eigenschaften
Count |
Ruft die Anzahl der Elemente ab, die in Queue enthalten sind. |
IsSynchronized |
Ruft einen Wert ab, der angibt, ob der Zugriff auf die Queue synchronisiert (threadsicher) ist. |
SyncRoot |
Ruft ein Objekt ab, mit dem der Zugriff auf Queue synchronisiert werden kann. |
Methoden
Clear() |
Entfernt alle Objekte aus dem Queue. |
Clone() |
Erstellt eine flache Kopie von Queue. |
Contains(Object) |
Bestimmt, ob sich ein Element in Queue befindet. |
CopyTo(Array, Int32) |
Kopiert die Queue-Elemente in ein vorhandenes eindimensionales Array, beginnend beim angegebenen Arrayindex. |
Dequeue() |
Entfernt das Objekt am Anfang der Queue und gibt es zurück. |
Enqueue(Object) |
Fügt am Ende der Queue ein Objekt hinzu. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetEnumerator() |
Gibt einen Enumerator zurück, der die Queue durchläuft. |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
Peek() |
Gibt das Objekt am Anfang der Queue zurück, ohne es zu entfernen. |
Synchronized(Queue) |
Gibt eine neue Queue zurück, die die ursprüngliche Warteschlange umschließt und threadsicher ist. |
ToArray() |
Kopiert die Queue-Elemente in ein neues Array. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
TrimToSize() |
Legt die Kapazität auf die Anzahl der tatsächlich in der Queue enthaltenen Elemente fest. |
Erweiterungsmethoden
Cast<TResult>(IEnumerable) |
Wandelt die Elemente eines IEnumerable in den angegebenen Typ um |
OfType<TResult>(IEnumerable) |
Filtert die Elemente eines IEnumerable anhand eines angegebenen Typs |
AsParallel(IEnumerable) |
Ermöglicht die Parallelisierung einer Abfrage. |
AsQueryable(IEnumerable) |
Konvertiert einen IEnumerable in einen IQueryable. |
Gilt für:
Threadsicherheit
Öffentliche statische (Shared
in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Um die Threadsicherheit des Queuezu gewährleisten, müssen alle Vorgänge über den von der Synchronized(Queue) -Methode zurückgegebenen Wrapper ausgeführt werden.
Die Enumeration einer Auflistung ist systemintern keine threadsichere Prozedur. Selbst wenn eine Auflistung synchronisiert wird, besteht die Möglichkeit, dass andere Threads sie ändern. Dies führt dazu, dass der Enumerator eine Ausnahme auslöst. Um während der Enumeration Threadsicherheit zu gewährleisten, können Sie entweder die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen, die aus von anderen Threads stammenden Änderungen resultieren, abfangen.