Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Работа с типом Queue

Работа с типом Queue

Тип Queue (очередь) – это контейнер, гарантирующий размещение элементов по правилу "первым прибыл – первым обслужен". К сожалению, люди сталкиваются с очередями повсеместно: очереди в банке, кинотеатре, по утрам к автомату, продающему кофе, и т.д. При моделировании сценариев, в которых элементы обрабатываются по правилу очереди, на помощь приходит System.Collections.Queue. Вдобавок к функциональным возможностям, обеспечиваемым поддерживаемыми интерфейсами, Queue определяет ряд членов, описанных в табл. 7.4.

Таблица 7.4. Члены типа Queue

Член Описание
Dequeue() Возвращает объект, находящийся в начале Queue, с одновременным его удалением
Enqueue() Добавляет объект в конец Queue
Peek() Возвращает объект, находящийся в начале Queue, без его удаления 

Чтобы проиллюстрировать возможности этих методов, снова используем нашу автомобильную тему и построим объект Queue, моделирующий очередь автомобилей перед въездом на мойку. Во-первых, предположим, что у нас есть следующий вспомогательный статический метод.

public static void WashCar(Car с) {
 Console.WriteLine("Моется {0}", с.petName);
}

Теперь рассмотрим следующий программный код.

static void Main(string[] args) {
 …
 // Создание очереди с тремя элементами.
 Queue carWashQ = new Queue();
 carWashQ.Enqueue(new Car ("Первая", 0, 1));
 carWashQ.Enqueue(new Car("Вторая", 0, 2));
 carWashQ.Enqueue(new Car("Третья", 0, 3));
 // Первая машина в очереди.
 Console.WriteLine("Первой в очереди является {0}", ((Сar)сarWashQ.Peek()).petName);
 // Удаление всех элементов из очереди.
 WashCar((Car)carWashQ.Dequeue());
 WashCar((Car)carWashQ.Dequeue());
 WashCar((Car)carWashQ.Dequeue());
 // Попытаемся удалить снова?
 try {WashCar((Car)carWashQ.Dequeue());}
 catch(Exception е) { Console.WriteLine("Ошибка: {0}", e.Message);}
}

Здесь в тип Queue с помощью метода Enqueue() вставляются три элемента. Вызов Реек() позволяет проверить, (но не удалить) первый элемент в текущем состоянии Queue, и таким элементом в данном случае является машина с именем Первая. Наконец, с помощью Dequeue() элемент из очереди удаляется и посылается во вспомогательную функцию WashСar() для обработки. Обратите внимание на то, что при попытке удаления элемента из пустой очереди среда выполнения генерирует исключение.

Оглавление книги


Генерация: 1.258. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз