English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Queue является специфическим типом集合а, который хранит элементы в порядке FIFO (first in, first out), что полностью противоположно Stack <T> коллекции. Она содержит элементы в порядке их добавления. C# включает в себя генерическую Queue<T> и негенерическую Queue коллекцию. Рекомендуется использовать генерическую Queue<T> коллекцию.
Queue<T> является FIFO (first in, first out) коллекцией.
Она находится в пространстве имён System.Collection.Generic.
Queue<T> может содержать элементы指定ного типа. Она предоставляет проверку типов в время компиляции и не выполняет装箱/расboxing, так как является генерической.
Элементы можно добавить с помощью метода Enqueue(). Использование синтаксиса инициализации коллекции (collection-initializer) невозможно.
Элементы можно извлечь с помощью методов Dequeue() и Peek(). Она не поддерживает индексаторы.
На следующем рисунке показана коллекция Queue:
Вы можете создать объект,specifying the type parameter for the element type stored in Queue<T>. В следующем примере используется метод Enqueue () для создания и добавления элементов в Queue <T>. Коллекция Queue позволяет null (для типов ссылочных) и повторяющиеся значения.
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); // Вывод 1234
Свойство | Использование |
---|---|
Count | Возвращает общее количество элементов в очереди. |
Метод | Использование |
---|---|
Enqueue(T) | Добавление элемента в очередь. |
Dequeue | Возвращает элемент с начала очереди и удаляет его. |
Peek(T) | Возвращает первый элемент из очереди, не удаляя его. |
Contains(T) | Проверка наличия элемента в очереди |
Clear() | Удаление всех элементов из очереди. |
Методы Dequeue() и Peek() используются для извлечения первого элемента из集合а очереди. Метод Dequeue() удаляет и возвращает первый элемент из очереди, так как элементы хранятся в очереди в порядке FIFO. Вызов метода Dequeue() в пустой очереди вызывает исключение InvalidOperation. Поэтому перед вызовом очереди всегда проверяйте, больше ли количество элементов в очереди нуля.
Queue<string> strQ = new Queue<string>(); strQ.Enqueue("H"); strQ.Enqueue("e"); strQ.Enqueue("l"); strQ.Enqueue("l"); strQ.Enqueue("o"); Console.WriteLine("Общее количество элементов: {0}", strQ.Count); // Вывод 5 while (strQ.Count > 0){ Console.WriteLine(strQ.Dequeue()); // Вывод Hello } Console.WriteLine("Общее количество элементов: {0}", strQ.Count); // Вывод 0
Метод Peek() всегда возвращает первое значение из集合а очереди, не удаляя его. Вызов этого метода в пустой очереди вызывает исключение InvalidOperationException.
Queue<string> strQ = new Queue<string>(); strQ.Enqueue("H"); strQ.Enqueue("e"); strQ.Enqueue("l"); strQ.Enqueue("l"); strQ.Enqueue("o"); Console.WriteLine("Общее количество элементов: {0}", strQ.Count); // Вывод 5 if(strQ.Count > 0){ Console.WriteLine(strQ.Peek()); // Вывод H Console.WriteLine(strQ.Peek()); // Вывод H } Console.WriteLine("Общее количество элементов: {0}", strQ.Count); // Вывод 0
Метод Contains() проверяет, существует ли элемент в очереди. Если указанный элемент существует, то возвращает true, в противном случае возвращает false.
Подпись 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