`Queue<T>` в C# является обобщённой коллекцией (generic collection), представляющей собой структуру данных типа "очередь". Очередь работает по принципу "первым пришёл — первым ушёл" (FIFO — First In, First Out). Это значит, что элементы извлекаются из коллекции в том порядке, в котором они были добавлены.
### Основные операции с `Queue<T>`:
1. **Enqueue(T item)** - добавляет элемент в конец очереди.
2. **T Dequeue()** - удаляет и возвращает элемент из начала очереди. Если очередь пуста, происходит исключение `InvalidOperationException`.
3. **T Peek()** - просто возвращает элемент из начала очереди без его удаления. Если очередь пуста, также происходит исключение `InvalidOperationException`.
4. **Clear()** - удаляет все элементы из очереди.
5. **Contains(T item)** - проверяет, содержится ли элемент в очереди, и возвращает `true`, если содержится, иначе `false`.
6. **ToArray()** - преобразует очередь в массив.
### Пример использования:
```csharp
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Создание очереди целых чисел
Queue<int> queue = new Queue<int>();
// Добавление элементов в очередь
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
// Вывод первого элемента без его удаления
Console.WriteLine(
quot;Первый в очереди: {queue.Peek()}");
// Удаление и возвращение элементов из очереди
while (queue.Count > 0)
{
Console.WriteLine(queue.Dequeue());
}
}
}
```
### Производительность:
- **Добавление элемента (Enqueue)**: O(1) - добавление в конец очереди выполняется за постоянное время.
- **Удаление элемента (Dequeue)**: O(1) - удаление из начала очереди также выполняется за постоянное время.
- **Поиск элемента (Contains)**: O(n) - требует просмотра всех элементов, поэтому время выполнения линейно зависит от количества элементов в очереди.
`Queue<T>` реализована с использованием динамического кольцевого буфера, что обеспечивает высокую эффективность основных операций очереди. Важно понимать, что при расширении внутреннего массива (когда текущая вместимость не может вместить новые элементы) происходит выделение нового массива и копирование элементов, что может привести к временному снижению производительности.