Коллекции С#: реализация интерфейсов для сортировки элементов.

 

Программные объекты в языке C# могут объединяться в коллекции. Благодаря коллекциям возможна эффективная групповая обработка объектов (причем, необязательно однотипных). Наиболее востребованы в программах коллекции обобщенного и необобщенного типа.

Необобщенные коллекции соответствуют ряду типовых структур данных, к которым относятся:

- Динамический массив ArrayList, способный, подобно контейнеру vector в STL, увеличивать свой размер при необходимости;

- хеш-таблицу для пар "ключ-значение” Hashtable;

- очередь Queue, работающая по принципу FIFO ("первым пришел — первым вышел");

- отсортированный список пар "ключ-значение" SortedList, являющийся аналогом контейнера map в STL;

- стек Stack, реализующий обработку по принципу LIFO )"первым пришел — последним вышел").

Особенность необобщенных коллекций заключается в том, что они хранят данные в виде ссылок на тип Object. Так как этот тип данных является базовым для всех типов CLS, в необобщенные коллекции можно объединять данные любого типа.

Функциональность необобщенных коллекций декларируется специализированными интерфейсами [4](см. таблицу 4).

Таблица 4. Интерфейсы необобщенных коллекций

Интерфейс Описание
ICollection Определяет элементы, которые должны иметь все необобщенные коллекции
IComparer Определяет метод Compare() для сравнения объектов, хранящихся в коллекции
IDictionary Определяет коллекцию, состоящую из пар "ключ-значение"
IDictionaryEnumerator Определяет перечислитель для коллекции, реализующей интерфейс IDictionary
IEnumerable Определяет метод GetEnumerator (), предоставляющий перечислитель для любого класса коллекции
IEnumerator Предоставляет методы, позволяющие получать содержимое коллекции по очереди
IEqualityComparer Сравнивает два объекта на предмет равенства
IList Определяет коллекцию, доступ к которой можно получить с помощью индексатора
IStructuraIComparable Определяет метод CompareTo(), применяемый для структурного сравнения
IStructuralEquatable Определяет метод Equals(), применяемый для выяснения структурного, а не ссылочного равенства. Кроме того, определяет метод GetHashCode()

Классы и интерфейсы необобщенных коллекций находятся в пространстве имен System.Collections.

Обобщенные коллекции реализуют принцип обобщенного программирования для стандартных структур данных, в том числе имеющих реализации в виде необобщенных коллекций. Обобщенные коллекции (таблица 5) обеспечивают безопасность типизации, поскольку могут хранить объекты лишь одного типа данных.

Таблица 5. Обобщенные коллекции языка C#

Обобщенная коллекция Описание
Dictionary<Tkey, TValue> Сохраняет пары "ключ-значение". Обеспечивает такие же функциональные возможности, как и необобщенный класс Hashtable
HashSet<T> Сохраняет ряд уникальных значений, используя хештаблицу
LinkedList<T> Сохраняет элементы в двунаправленном списке
List<T> Создает динамический массив. Обеспечивает такие же функциональные возможности, как и необобщенный класс ArrayList
Queue<T> Создает очередь. Обеспечивает такие же функциональные возможности, как и необобщенный класс Queue
SortedDictionary<TKey, TValue> Создает отсортированный список из пар "ключ-значение"
SortedList<TKey, TValue> Создает отсортированный список из пар "ключ-значение". Обеспечивает такие же функциональные возможности, как и необобщенный класс SortedList
SortedSet<T> Создает отсортированное множество
Stack<T> Создает стек. Обеспечивает такие же функциональные возможности, как и необобщенный класс Stack