Bool IsProperSupersetOf(lEnumera

возвращает логическое значение true, если вы

ble<T> other)

зывающее множество является правильным надмножеством другого множества other, а иначе — логическое значение false

bool IsSubsetOf(IEnumerable<T>

Возвращает логическое значение true, если вы

other)

зывающее множество является подмножеством другого множества other, а иначе — логическое значение false

Bool

Возвращает логическое значение true, если вы

IsSupersetOf(IEnumerable<T>

зывающее множество является надмножеством

other)

другого множества other, а иначе — логическое значение false

bool Overlaps(IEnumerable<T>

Возвращает логическое значение true, если вы

other)

зывающее множество и другое множество otherсодержат хотя бы один общий элемент, а иначе — логическое значение false

bool SetEquals(IEnumerable<T>

Возвращает логическое значение true, если все

other)

элементы вызывающего множества и другого множества otherоказываются общими, а иначе —логическое значение false. Порядок расположения элементов не имеет значения, а дублирующиеся элементы во другом множестве otherигнорируются

Void SymmetricExceptWith

После вызова этого метода вызывающее множе

(IEnumerable<T> other)

ство будет содержать симметрическую разность своих элементов и элементов другого множества

other

void UnionWith(IEnumerable<T>

После вызова этого метода вызывающее множе

other)

ство будет содержать объединение своих элементов и элементов другого множества other

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

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

public TKey Key { get; }; public TValue Value { get; };

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

public KeyValuePair(TKey key, TValue value) где key обозначает ключ, a value — значение.

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

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

Таблица 25.14. Основные классы обобщенных коллекций

Класс

Описание

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>, доступной только для чтения синхронизированной коллекции на основе класса lList<T>; абстрактный класс SynchronizedKeyCollectioncK, т>, служащий в качестве базового для класса коллекции System. ServiceModel. UriSchemeKeyedCollection; а также класс KeyedByTypeCollection<T> коллекции, в которой в качестве ключей используются отдельные типы данных.

Класс List<T>

В классе List<T> реализуется обобщенный динамический массив. Он ничем принципиально не отличается от класса необобщенной коллекции ArrayList. В этом классе реализуются интерфейсы ICollection, ICollection<T>, IList, IList<T>, IEnumerable и IEnumerable<T>. У класса List<T> имеются следующие конструкторы.

Public List()

public List(IEnumerable<T> collection) public List(int capacity)

Первый конструктор создает пустую коллекцию класса List с выбираемой по умолчанию первоначальной емкостью. Второй конструктор создает коллекцию типа List с количеством инициализируемых элементов, которое определяется параметром collection и равно первоначальной емкости массива. Третий конструктор создает коллекцию типа List, имеющую первоначальную емкость, задаваемую параметром capacity . В данном случае емкость обозначает размер базового массива, используемого для хранения элементов коллекции. Емкость коллекции, создаваемой в виде динамического массива, может увеличиваться автоматически по мере добавления в нее элементов.

В классе List<T> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.15.

Таблица 25.15. Наиболее часто используемые методы, определенные в классе List<T>

Метод

Описание

public virtual void AddRange(Icollection - collection) public virtual int BinarySearch(T item)

Добавляет элементы из коллекции collection в конец вызывающей коллекции типа ArrayList

Выполняет поиск в вызывающей коллекции значения, задаваемого параметром item. Возвращает индекс совпавшего элемента. Если искомое значение не найдено, возвращается отрицательное значение. Вызывающий список должен быть отсортирован

Метод

Описание

Public

Int BinarySearch(T

Выполняет поиск в вызывающей коллекции значе

item,

IComparer<T> comparer)

ния, задаваемого параметром item , используя для сравнения указанный способ, определяемый параметром comparer. Возвращает индекс совпавшего элемента. Если искомое значение не найдено, возвращается отрицательное значение. Вызывающий список должен быть отсортирован

Public

Int BinarySearch(int

Выполняет поиск в вызывающей коллекции значе

index,

int count, T item,

ния, задаваемого параметром item , используя для

IComparer<T> comparer)

сравнения указанный способ, определяемый параметром comparer. Поиск начинается с элемента, указываемого по индексу index, и включает количество элементов, определяемых параметром count. Метод возвращает индекс совпавшего элемента. Если искомое значение не найдено, возвращается отрицательное значение. Вызывающий список должен быть отсортирован

Public

List<T> GetRange(int

Возвращает часть вызывающей коллекции. Часть

index,

int count)

возвращаемой коллекции начинается с элемента, указываемого по индексу index , и включает количество элементов, задаваемое параметром count. Возвращаемый объект ссылается на те же элементы, что и вызывающий объект

Public

int IndexOf(T item)

Возвращает индекс первого вхождения элемента item в вызывающей коллекции. Если искомый элемент не обнаружен, возвращается значение -1

Public

Void InsertRange(int

Вставляет элементы коллекции collection в вы

index,

IEnumerable<T>

зывающую коллекцию, начиная с элемента, указы

collection)

ваемого по индексу index

public i tern)

Int LastlndexOf(T

Возвращает индекс последнего вхождения элемента item в вызывающей коллекции. Если искомый элемент не обнаружен, возвращается значение -1

Public

Void RemoveRange(int

Удаляет часть вызывающей коллекции, начиная с

index,

int count)

элемента, указываемого по индексу index , и включая количество элементов, определяемое параметром count

Public

Void Reverse()

Располагает элементы вызывающей коллекции в обратном порядке

Public

Void Reverse(int

Располагает в обратном порядке часть вызываю

index,

int count)

щей коллекции, начиная с элемента, указываемого по индексу index , и включая количество элементов, определяемое параметром count

Public

Void Sort()

Сортирует вызывающую коллекцию по нарастающей

Окончание табл. 25.15

Метод

Описание

Public void

Сортирует вызывающую коллекцию, используя

Sort(IComparer<T> comparer)

для сравнения способ, задаваемый параметром comparer. Если параметр comparer имеет пустое значение, то для сравнения используется способ, выбираемый по умолчанию

Public void

Сортирует вызывающую коллекцию, используя для

Sort(Comparison<T> comparison)

сравнения указанный делегат

public void Sort(int index,

Сортирует вызывающую коллекцию, используя

int count , IComparer<T>

для сравнения способ, задаваемый параметром

comparer)

comparer. Сортировка начинается с элемента, указываемого по индексу index , и включает количество элементов, определяемых параметром count. Если параметр comparer имеет пустое значение, то для сравнения используется способ, выбираемый по умолчанию

public T [ ] ToArrayO

Возвращает массив, содержащий копии элементов вызывающего объекта

Public void TrimExcess()

Сокращает емкость вызывающей коллекции таким образом, чтобы она не превышала 10% от количества элементов, хранящихся в ней на данный момент

В классе List<T> определяется также собственное свойство Capacity, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Это свойство объявляется следующим образом.

public int Capacity { get; set; }

Свойство Capacity позволяет установить и получить емкость вызывающей коллекции в качестве динамического массива. Эта емкость равна количеству элементов, которые может содержать коллекция до ее вынужденного расширения. Такая коллекция расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если заранее известно количество элементов коллекции. Благодаря этому исключаются издержки на выделение дополнительной памяти.

В классе List<T> реализуется также приведенный ниже индексатор, определенный в интерфейсе IList<T>.

public Т this[int index] { get; set; }

С помощью этого индексатора устанавливается и получается значение элемента коллекции, указываемое по индексу index.

В приведенном ниже примере программы демонстрируется применение класса List<T>. Это измененный вариант примера, демонстрировавшего ранее класс ArrayList. Единственное изменение, которое потребовалось для этого, заключалось в замене класса ArrayList классом List, а также в использовании параметров обобщенного типа.

// Продемонстрировать применение класса List<T>. using System;

Наши рекомендации