Внешний вид сайта:

Обобщенные коллекции

Полезность страницы:
0/100

Благодаря внедрению обобщений прикладной интерфейс Collections API значительно расширился, в результате чего количество классов коллекций и интерфейсов удвоилось. Обобщенные коллекции объявляются в пространстве имен System.Collections.Generic.

Как правило, классы обобщенных коллекций являются не более чем обобщенными эквивалентами классов необобщенных коллекций, хотя это соответствие не является взаимно однозначным. Например, в классе обобщенной коллекции LinkedList реализуется двунаправленный список, тогда как в необобщенном эквиваленте его не существует. В некоторых случаях одни и те же функции существуют параллельно в классах обобщенных и необобщенных коллекций, хотя и под разными именами. Так, обобщенный вариант класса ArrayList называется List, а обобщенный вариант класса HashTable — Dictionary. Кроме того, конкретное содержимое различных интерфейсов и классов реорганизуется с минимальными изменениями для переноса некоторых функций из одного интерфейса в другой. Но в целом, имея ясное представление о необобщенных коллекциях, можно без особого труда научиться применять и обобщенные коллекции.

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

Обобщенные коллекции определяются в ряде интерфейсов и классов, реализующих эти интерфейсы.

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

В пространстве имен System.Collections.Generic определен целый ряд интерфейсов обобщенных коллекций, имеющих соответствующие аналоги среди интерфейсов необобщенных коллекций:

ICollection<T> - Определяет основополагающие свойства обобщенных коллекций
IComparer<T> - Определяет обобщенный метод Compare() для сравнения объектов, хранящихся в коллекции
IDictionary<Tkey, TValue> - Определяет обобщенную коллекцию, состоящую из пар "ключ-значение"
IEnumerable<T> - Определяет обобщенный метод GetEnumerator(), предоставляющий перечислитель для любого класса коллекции
Enumerator<T> - Предоставляет методы, позволяющие получать содержимое коллекции по очереди
IEqualityComparer<T> - Сравнивает два объекта на предмет равенства
IList<T> - Определяет обобщенную коллекцию, доступ к которой можно получить с помощью индексатора

Структура KeyValuePair<TKey, TValue>

В пространстве имен System.Collections.Generic определена структура KeyValuePair<TKey, TValue> Она служит для хранения ключа и его значения и применяется в классах обобщенных коллекций, в которых хранятся пары "ключ-значение", как, например, в классе Dictionary<TKey, TValue> В этой структуре определяются два следующих свойства:

public ТКеу Key { get; };
public TValue Value { get; };

В этих свойствах хранятся ключ и значение соответствующего элемента коллекции. Для построения объекта типа KeyValuePair<TKey, TValue> служит конструктор:

public KeyValuePair(ТКеу key, TValue value)

где key обозначает ключ, a value — значение.

Классы обобщенных коллекций

Kлассы обобщенных коллекций по большей части соответствуют своим необобщенным аналогам, хотя в некоторых случаях они носят другие имена. Отличаются они также своей организацией и функциональными возможностями. Классы обобщенных коллекций определяются в пространстве имен System.Collections.Generic:

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

В пространстве имен System.Collections.Generic находятся также следующие классы: класс SynchronizedCollection<T> синхронизированной коллекции на основе класса IList<T>; класс SynchronizedReadOnlyCollection<T>, доступной только для чтения синхронизированной коллекции на основе класса IList<T>; абстрактный класс SynchronizedKeyCollection<K, Т>, служащий в качестве базового для класса коллекции System.ServiceModel.UriSchemeKeyedCollection; а также класс KeyedByTypeCollection<T> коллекции, в которой в качестве ключей используются отдельные типы данных.

Дополнить страницу Вы можете помочь другим людям дополнив эту страницу вашими знаниями по данному вопросу!
20:27

Комментарии

Нет комментариев. Ваш будет первым!