- •Содержание
- •Введение
- •Коллекции в .Net
- •Виды коллекций
- •Типы коллекций
- •Интерфейсы, используемые коллекциями
- •Необобщенные коллекции
- •Обобщенные коллекции
- •Основные обобщенные коллекции
- •Параллельные коллекции
- •Специальные и наблюдаемые коллекции
- •Специальные коллекции
- •Наблюдаемые коллекции
- •Битовые коллекции
- •Класс BitArray
- •Структура BitVector32
- •Реализация интерфейса iComparable
- •Реализация интерфейса iComparer
- •Перечислители
- •Применение обычного перечислителя
- •Применение перечислителя типа iDictionaryEnumerator
- •Реализация интерфейсов iEnumerable и iEnumerator
- •Итераторы и оператор yield
- •Именованный итератор
- •Заключение
- •Список использованных источников
- •Приложение а (обязательное) Листинги и результаты работы программ
Обобщенные коллекции
Обобщенные коллекции - это те же самые обобщенные классы. Использование их перед необобщенными коллекциями имеет следующие преимущества: повышение производительности (не надо тратить время на упаковку и распаковку объекта) и повышенная безопасность. Классы обобщенных коллекций находятся в пространстве имен System.Collections. Generic. Функционал коллекций по большей части описывается в обобщенных интерфейсах. [4]
Необобщенные коллекции обычно предназначены для оперирования над типами System.Object и, таким образом, являются слабо типизированными контейнерами (тем не менее, некоторые необобщенные коллекции работают только со специфическим типом данных, таким как объекты string). В противоположность этому, обобщенные коллекции являются намного более безопасными к типам, учитывая, что требуется указывать “тип типа”, который они будут содержать после создания. При-
знаком любого обобщенного элемента является наличие “параметра типа”, обозначаемого с помощью угловых скобок (например, List<T>). [6]
Параметр T в угловых скобках называется универсальным параметром, так как вместо него можно подставить любой тип. [3]
Интерфейсы обобщенных коллекций отличаются от необобщенных двойников не только наличием универсального параметра T, но и самой функциональностью. В таблице 2 представлены основные интерфейсы обобщенных коллекций.[2]
Таблица 2 – Интерфейсы обобщенных коллекций
Название |
Описание |
IEnumerable<T> |
Определяет метод GetEnumerator, с помощью которого можно получать элементы любой коллекции. Реализация данного интерфейса позволяет перебирать элементы коллекции с помощью цикла foreach |
Продолжение таблицы 2
IEumerator<T> |
Определяет методы, с помощью которых потом можно получить содержимое коллекции по очереди |
ICollection<T> |
Представляет ряд общих свойств и методов для всех необобщенных коллекций (например, методы CopyTo, Add, Remove, Contains, свойство Count) |
IList<T> |
Предоставляет функционал для создания последовательных списков |
IComparer<T> |
Определяет метод Compare для сравнения двух однотипных объектов |
IDictionary<TKey, TValue> |
Определяет поведение коллекции, при котором она должна хранить объекты в виде пар ключ-значение: для каждого объекта определяется уникальный ключ типа, указанного в параметре TKey, и этому ключу соответствует определенное значение, имеющее тип, указанный в параметре TValue |
IEqualityComparer<T> |
Определяет методы, с помощью которых два однотипных объекта сравниваются на предмет равенства |
Ниже, в таблице 3, представлены классы коллекций в пространстве имен System.Collections.Generic, которые реализуют интерфейсы, описанные в предыдущей таблице. [4]
Таблица 3 – Классы коллекций
Название |
Описание |
List<T> |
Класс, представляющий последовательный список. Реализует интерфейсы IList<T>, ICollection<T>, IEnumerable<T> |
Продолжение таблицы 3
Dictionary<TKey, TValue> |
Класс коллекции, хранящей наборы пар "ключ-значение". Реализует интерфейсы icollection<T>, ienumerable<T>, idictionary<tkey, tvalue> |
LinkedList<T> |
Класс двух связанного списка. Реализует интерфейсы icollection<t> и ienumerable<t> |
Queue<T> |
Класс очереди объектов, работающей по алгоритму LIFO("первый вошел - первый вышел"). Реализует интерфейсы icollection, ienumerable<T> |
SortedSet<T> |
Класс отсортированной коллекции однотипных объектов. Реализует интерфейсы ICollection<T>, ISet<T>, IEnumerable<T> |
SortedList<TKey, TValue> |
Класс коллекции, хранящей наборы пар "ключ-значение", отсортированных по ключу. Реализует интерфейсы ICollection<T>, IEnumerable<T>, IDictionary<TKey, TValue> |
SortedDictionary<TKey, TValue> |
Класс коллекции, хранящей наборы пар "ключ-значение", отсортированных по ключу. Похож на класс SortedList<TKey, TValue>. Основные отличия состоят лишь в использовании памяти и в скорости вставки и удаления |
Stack<T> |
Класс стека однотипных объектов. Реализует интерфейсы ICollection<T> и IEnumerable<T> |
Большинство обобщенных классов коллекций дублируют необобщенные классы коллекций. Но если не надо хранить объекты разных типов, то предпочтительнее использовать обобщенные коллекции.[3]
