C# Очередь

Коллекции C#

В C# Queue — это структура данных, работающая по принципу «первым пришёл — первым вышел» (FIFO).

Queue относится к пространствам имён System.Collections или System.Collections.Generic, которые предоставляют соответственно необобщённую и обобщённую реализации. Queue подходит для сценариев, в которых данные должны обрабатываться в порядке их постановки в очередь.

Queue представляет собойпервым пришёл — первым вышелколлекцию объектов. Когда вам нужен доступ к элементам по принципу «первым пришёл — первым вышел», используйте очередь. Когда вы добавляете элемент в список, это называетсяEnqueue, а когда удаляете элемент из списка, это называетсяИзвлечь из очереди。

Особенности

  • первым пришёл — первым вышел: элемент, добавленный в очередь раньше всех, удаляется первым.
  • Динамический размер: ёмкость очереди динамически регулируется по мере необходимости.
  • Поддержка обобщений: с помощьюQueue<T>может хранить строго типизированные элементы.
  • Потокобезопасность:Queueсам по себе не является потокобезопасным, но можно использоватьConcurrentQueue<T>Реализация потокобезопасности.

Методы и свойства класса Queue

В таблице ниже перечисленыQueueНекоторые распространённые способы использования классаСвойство:

Имя атрибутаTypeОписание
CountintПолучает количество элементов в очереди.
SyncRootobjectдля получения объекта для синхронизации доступа к очереди (необобщённой).
IsSynchronizedboolУказывает, синхронизирован ли доступ к очереди (потокобезопасный, всегдаfalse)。

В таблице ниже перечисленыQueueНекоторые распространённые способы использования классаМетоды:

Название методаТип возвращаемого значенияОписание
Операции с элементами
Enqueue(object item)voidДобавляет элемент в конец очереди.
Dequeue()objectУдаляет и возвращает элемент, находящийся в начале очереди.
Peek()objectВозвращает элемент, находящийся в начале очереди, не удаляя его.
Clear()voidУдаляет все элементы из очереди.
Проверка и копирование
Contains(object item)boolОпределяет, содержится ли элемент в очереди.
ToArray()object[]Копирует элементы очереди в новый массив.
Clone()objectСоздает поверхностную копию текущей очереди.
CopyTo(Array array, int index)voidКопирует элементы очереди в существующий массив, начиная с указанного индекса.
Поддержка перечислителя
GetEnumerator()IEnumeratorВозвращает перечислитель, осуществляющий перебор элементов очереди.
Потокобезопасность
Synchronized(Queue queue)QueueВозвращает потокобезопасную оболочку очереди.

Пример

В следующем примере демонстрируется использование Queue:

Пример 1

using System;
using System.Collections;

class Program
{
    static void Main()
    {
        Queue queue = new Queue();

        // Добавить элементы
        queue.Enqueue("First");
        queue.Enqueue("Second");
        queue.Enqueue("Third");

        // Просмотреть начало
        Console.WriteLine($"Peek: {queue.Peek()}"); // Вывод: First

        // Удалить элемент
        Console.WriteLine($"Dequeue: {queue.Dequeue()}"); // Вывод: First

        // Оставшиеся элементы
        foreach (var item in queue)
        {
            Console.WriteLine(item); // Вывод: Second, Third
        }

        // Проверить наличие
        Console.WriteLine($"Содержит 'Second': {queue.Contains("Second")}"); // вывод: True

        // Преобразовать в массив
        object[] array = queue.ToArray();
        Console.WriteLine($"Длина массива: {array.Length}"); // Вывод: 2
    }
}

Пример 2

using System;
using System.Collections;

namespace CollectionsApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         Queue q = new Queue();

         q.Добавление в очередь('A');
         q.Добавление в очередь('M');
         q.Добавление в очередь('G');
         q.Добавление в очередь('W');
         
         Console.WriteLine("Текущая очередь: ");
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         q.Добавление в очередь('V');
         q.Добавление в очередь('H');
         Console.WriteLine("Текущая очередь: ");        
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         Console.WriteLine("Удаление некоторых значений ");
         char ch = (char)q.Dequeue();
         Console.WriteLine("Удалённое значение: {0}", ch);
         ch = (char)q.Dequeue();
         Console.WriteLine("Удалённое значение: {0}", ch);
         Console.ReadKey();
      }
   }
}

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

Current queue: 
A M G W 
Current queue: 
A M G W V H 
Removing values
The removed value: A
The removed value: M

Коллекции C#

Другие расширения