Класс коллекции, поддерживающий очередь, носит название Queue
. В нем реализуются интерфейсы ICollection, IEnumerable
и ICloneable
. Этот класс создает динамическую коллекцию, которая расширяется, если в ней необходимо хранить вводимые элементы. Так, если в очереди требуется свободное место, ее размер увеличивается на коэффициент роста, который по умолчанию равен 2,0.
В классе Queue
определяются приведенные ниже конструкторы.
public Queue()
public Queue (int capacity)
public Queue (int capacity, float growFactor)
public Queue (ICollection col)
В первой форме конструктора создается пустая очередь с выбираемыми по умолчанию емкостью и коэффициентом роста 2,0. Во второй форме создается пустая очередь, первоначальный размер которой определяет емкость, задаваемая параметром capacity, а коэффициент роста по умолчанию выбирается для нее равным 2,0. В третьей форме допускается указывать не только емкость (в качестве параметра capaci ty), но и коэффициент роста создаваемой очереди (в качестве параметра growFactor в пределах от 1,0 до 10,0). И в четвертой форме создается очередь, состоящая из элементов указываемой коллекции col. Ее первоначальная емкость равна количеству указанных элементов, а коэффициент роста по умолчанию выбирается для нее равным 2,0.
В классе Queue определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.8. Эти методы обычно применяются следующим образом. Для того чтобы поместить объект в очередь, вызывается метод Enqueue()
. Если требуется извлечь и удалить первый объект из начала очереди, то вызывается метод Dequeue()
. Если же требуется извлечь, но не удалять следующий объект из очереди, то вызывается метод Реек()
. А если методы Dequeue()
и Реек()
вызываются, когда очередь пуста, то генерируется исключение InvalidOperationException
.
Таблица 25.8. Наиболее часто используемые методы, определенные в классе Queue
Метод - Описание
public virtual void Clear() -Устанавливает свойство Countравным нулю, очищая, по существу, очередь
public virtual bool Contains(object obj) -Возвращает логическое значение true,если объект objсодержится в вызывающей очереди, а иначе — логическое значение false
public virtual object Dequeue() -Возвращает объект из начала вызывающей очереди. Возвращаемый объект удаляется из очереди
public virtual void Enqueue(object obj) - Добавляет объект objв конец очереди
public virtual object Peek() -Возвращает объект из начала вызывающей очереди, но не удаляет его
public static Queue Synchronized(Queue queue) - Возвращает синхронизированный вариант коллекции типа Queue,передаваемой в качестве параметра queue
public virtual object[] ToArray() -Возвращает массив, который содержит копии элементов из вызывающей очереди
public virtual void TrimToSize() - Устанавливает значение свойства Capacityравным значению свойства Count
В приведенном ниже примере программы демонстрируется применение класса
Queue.
// Продемонстрировать применение класса Queue.
using System;
using System.Collections;
class QueueDemo {
static void ShowEnq(Queue q, int a) {
q.Enqueue(a) ;
Console.WriteLine("Поместить в очередь: Enqueue(" + a + ")");
Console.Write("Содержимое очереди: ");
foreach(int i in q)
Console.Write(i + " ");
Console.WriteLine() ;
}
static void ShowDeq(Queue q) {
Console.Write("Извлечь из очереди: Dequeue -> ");
int a = (int) q.Dequeue();
Console.WriteLine(a);
Console.Write("Содержимое очереди: ");
foreach(int i in q)
Console.Write(i + " ") ;
Console.WriteLine();
}
static void Main() {
Queue q = new Queue();
foreach(int i in q)
Console.Write(i + " ");
ShowEnq(q, 22);
ShowEnq(q, 65);
ShowEnq(q, 91);
ShowDeq(q);
ShowDeq(q);
ShowDeq(q);
try {
ShowDeq (q);
} catch (InvalidOperationException) {
Console.WriteLine("Очередь пуста.");
}
}
Читать дальше