В первой форме конструктора создается пустой список с выбираемой по умолчанию первоначальной емкостью. Во второй форме конструктора создается отсортированный список с указанным количеством элементов dictionary.
В третьей форме конструктора с помощью параметра capacity задается емкость коллекции, создаваемой в виде отсортированного списка. Если размер списка заранее известен, то, указав емкость создаваемой коллекции, можно исключить изменение размера списка во время выполнения, что, как правило, требует дополнительных затрат вычислительных ресурсов. И в четвертой форме конструктора допускается указывать с помощью параметра comparer способ сравнения объектов, содержащихся в списке.Емкость коллекции типа SortedList
увеличивается автоматически по мере необходимости, когда в список добавляются новые элементы. Если текущая емкость коллекции превышается, то она увеличивается. Преимущество указания емкости коллекции типа SortedList
при ее создании заключается в снижении или полном исключении издержек на изменение размера коллекции. Разумеется, указывать емкость коллекции целесообразно лишь в том случае, если заранее известно, сколько элементов требуется хранить в ней.В классе SortedList
определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.19. Следует иметь в виду, что перечислитель, возвращаемый методом GetEnumerator()
, служит для перечисления пар "ключ-значение", хранящихся в отсортированном списке в виде объектов типа KeyValuePair
.
Таблица 25.19. Наиболее часто используемые методы, определенные в классе SortedListCTKey, TValue>
Метод -
Описание
public void Add (TKey
key,TValuevalue) - Добавляет в список пару “ключ-значение", определяемую параметрами key и value. Если ключ key уже находится в списке, то его значение не изменяется, и генерируется исключение ArgumentException public bool ContainsKey (ТК
key) Возвращает логическое значение true, если вызывающий список содержит объект key в каче-_стве ключа; а иначе —логическое значение false
public bool ContainsValue(TValue
value) - Возвращает логическое значение true, если вызывающий список содержит значение value; в противном случае — логическое значение falsepublic IEnumerator> GetEnumerator()
- Возвращает перечислитель для вызывающего словаря public int IndexOfKey(TKey
key) - Возвращает индекс ключа key. Если искомый ключ не обнаружен в списке, возвращается значение -1public int IndexOfValue(TValue
value) - Возвращает индекс первого вхождения значения value в вызывающем списке. Если искомое значение не обнаружено в списке, возвращается значение -1public bool Remove(TKey
key) - Удаляет из списка пару “ключ-значение” по указанному ключу key. При удачном исходе операции возвращается логическое значение true, а если ключ key отсутствует в списке — логическое значение falsepublic void RemoveAt(int
index) - Удаляет из списка пару “ключ-значение” по указанному индексу indexpublic void TrimExcess() -
Сокращает избыточную емкость вызывающей коллекции в виде отсортированного списка
Кроме того, в классе SortedList
определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.
Свойство -
Описание
public int Capacity { get; set; } -
Получает или устанавливает емкость вызывающей коллекции в виде отсортированного спискаpublic IComparer Comparer { get; } -
Получает метод сравнения для вызывающего спискаpublic IList Keys { get; } -
Получает коллекцию ключейpublic IList Values { get; } -
Получает коллекцию значений
И наконец, в классе SortedList
реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionaryCTKey, TValue>
public TValue this[TKey key] { get; set; }
Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в данном случае в качестве индекса служит ключ элемента, а не сам индекс.
В приведенном ниже примере демонстрируется применение класса SortedList
Это еще один измененный вариант представленного ранее примера базы данных работников. В данном варианте база данных хранится в коллекции типа SortedList
.