Здесь в тип Queue с помощью метода Enqueue() вставляются три элемента. Вызов Реек() позволяет проверить, (но не удалить) первый элемент в текущем состоянии Queue, и таким элементом в данном случае является машина с именем Первая. Наконец, с помощью Dequeue() элемент из очереди удаляется и посылается во вспомогательную функцию WashСar() для обработки. Обратите внимание на то, что при попытке удаления элемента из пустой очереди среда выполнения генерирует исключение.
Работа с типом Stack
Тип System.Collections.Stack представляет коллекцию, в которой элементы размещаются по правилу "последним прибыл – первым обслужен". Как и следует ожидать, Stack определяет члены с именами Push() и Pop() (для добавления элементов в стек и удаления их из стека). В следующем примере стека используется стандартный тип System.String.
static void Main(string[] args) {
…
Stack stringStack = new Stack();
stringStack.Push("Первый");
stringStack.Push("Второй");
stringStack.Push("Третий");
// Смотрим на первый элемент, удаляем его и смотрим снова.
Console.WriteLine("Первый элемент: {0}", stringStack.Peek());
Console.WriteLine("Удален {0}", stringStack.Pop());
Console.WriteLine("Первый элемент: {0}", stringStack.Peek());
Console.WriteLine("Удален {0}", stringStack.Pop());
Console.WriteLine("Первый элемент: {0}", stringStack.Peek());
Console.WriteLine("Удален {0}", stringStack.Pop());
try {
Console.WriteLine("Первый элемент: {0}", stringStack.Peek());
Console.WriteLine ("Удален {0}", stringStack.Pop());
} catch(Exception e) {Console.WriteLine("Ошибка: {0}", e.Message);}
}
Здесь строится стек, содержащий три строковых типа (названных в соответствии с порядком их вставки). "Заглядывая" в стек, вы видите элемент, находящийся на вершине стека, поэтому первый вызов Peek() выявляет третью строку. После серии вызовов Pop() и Peek() стек, в конечном счете, опустошается, и тогда дополнительный вызов Peek()/Pop() приводит к генерированию системного исключения.
Исходный код.
Проект CollectionTypes размещен в подкаталоге, соответствующем главе 7.Пространство имен System.Collections.Specialized
Кроме типов, определенных в пространстве имен System.Collections, библиотеки базовых классов .NET предлагают набор более специализированных типов, определенных в пространстве имен System.Collections.Specialized. Например, типы StringDictionary и ListDictionary обеспечивают "стилизованную" реализацию интерфейса IDictionary. Описания основных типов класса из этого пространства имен предлагаются в табл. 7.5.
Таблица 7.5.
Типы пространства имен System.Collections.Specialized.Тип | Описание |
---|---|
CollectionsUtil | Создает коллекции, игнорирующие регистр символов в строках |
HybridDictionary | Реализует IDictionary, используя ListDictionary, пока коллекция мала, и переключаясь на Hashtable, когда коллекция становится большой |
ListDictionary | Реализует IDictionary, используя однонаправленный список. Рекомендуется для коллекций, которые содержат не более десятка элементов |
NameValueCollection | Представляет отсортированную коллекцию связанных ключей и значений типа String, которые могут быть доступны или по ключу, или по индексу |
StringCollection | Представляет коллекцию строк |
StringDictionary | Реализует Hashtable с ключом, строго типизированным, как строка, а не объект |
StringEnumerator | Поддерживает простой цикл по элементам StringCollection |
Резюме