Класс | Описание | Реализуемые интерфейсы |
---|---|---|
ArrayList | Представляет динамически изменяемый по размерам массив объектов | IList, ICollection, IEnumerable, ICloneable |
Hashtable | Представляет коллекцию объектов, идентифицируемых по числовому ключу. Пользовательские типы, хранимые в Hashtable, должны обязательно переопределять System.Object.GetHashCode | IDictionary, ICollection, IEnumerable, ICloneable |
Queue | Представляет стандартную очередь FIFO (first-in, first-out – первым прибыл, первым обслужен) | ICollection, ICloneable, IEnumerable |
SortedList | Подобен словарю, но здесь элементы могут быть также доступны по позиции (например, по индексу) | IDictionary, ICollection, IEnumerable, ICloneable |
Stack | Очередь LIFO (last-in, first-out – последним прибыл, первым обслужен), обеспечивающая функциональные возможности стека | ICollection, ICloneable, IEnumerable |
Вдобавок к этим ключевым типам в System.Collections определяются некоторые менее значительные (в смысле частоты использования) "игроки", такие как BitArray, CaseInsensitiveComparer и CaseInsensitiveHashCodeProvider. Кроме того, это пространство имен определяет небольшой набор абстрактных базовых классов (CollectionBase, ReadOnlyCollectionBase и DictionaryBase), которые могут использоваться для построения строго типизованных контейнеров.
Экспериментируя с типами System.Collections, вы обнаружите, что все они "стремятся" использовать общие функциональные возможности (в этом и заключается суть программирования на основе интерфейсов). Поэтому вместо описания всех членов каждого класса коллекции задачей нашего обсуждения будет демонстрация возможностей взаимодействия с тремя главными типами коллекций - ArrayList. Queue and Stack. Освоив функциональные возможности этих типов, вы без особого труда сможете прийти к пониманию и остальных классов коллекций (особенно если учесть что в файлах справки предлагается исчерпывающая документация для каждого из типов).
Работа с типом ArrayList
Тип ArrayList непременно станет для вас наиболее часто используемым типом пространства имей System.Collections, поскольку он позволяет динамически переопределять размеры содержимого. Для иллюстрации базовых возможностей этого типа предлагаем вам рассмотреть следующий программный код, в котором ArrayList используется для манипуляций с набором объектов Car.
static void Main(string[] args) {
// Создание ArrayList и заполнение исходными значениями.
ArrayList carArList = new ArrayList;
carArList.AddRange(new Car[] {new Car("Fred", 90
Console.WriteLine("\nЭлементов в carArList: {0}", carArList.Count);
// Печать текущих значений.
foreach(Car с in carArList) Console.WriteLine("Имя автомобиля: {0}", c.petName);
// Вставка нового элемента.
Console.WriteLine("\n-›Добавление нового Car.");
carArList.Insert(2, new Car("TheNewCar", 0, 12));
Console.WriteLine("Элементов в carArList: {0}", carArList.Count);
// Получение массива объектов из ArrayList и снова печать.
object[] arrayOfCars = carArList.ToArray;
for (int i = 0; i ‹ arrayOfCar.Length; i++) {
Console.WriteLine("Имя автомобиля: {0}", ((Car) arrayOfCars[i]).petName);
}
}