Урок 41. Специализированные коллекции C#
На сорок первом уроке по основам C# мы поговорим о специализированных (или специальных) классах коллекций. Платформа .NET framework предоставляет пять различных типов специализированных коллекций, каждый из которых оптимизирован для конкретной структуры или типа данных.
Специализированные коллекции
Платформа .NET framework включает в себя несколько специализированных коллекций, предназначенных для конкретных целей или типов данных. Они используются реже, чем универсальные коллекции и словари, описанные в предыдущих статьях учебника по основам C#. Однако разработчики должны понимать их использование, поскольку они могут обеспечить более подходящие и более эффективные коллекции в некоторых обстоятельствах.
Из-за их более специализированного использования, Microsoft создала System.Collections.Specialized пространство имен для этих классов. Чтобы использовать имена классов непосредственно при программировании, добавьте using System.Collections.Specialized; директиву к исходному коду.
Коллекция ListDictionary
Класс ListDictionary предоставляет структуру связанного списка для хранения пар ключ / значение. Связанный список-это стандартная программная структура, используемая для хранения ряда элементов или узлов. Каждый узел имеет указатель на следующий элемент в списке и, при необходимости, второй указатель на предыдущий элемент. ListDictionary является односвязным, так как он имеет одну ссылку на следующий элемент. Связанные списки полезны, поскольку они могут предоставлять упорядоченные данные без физической сортировки информации. По мере изменения содержимого коллекции необходимо изменять только указатели вокруг измененных данных.
ListDictionary работает быстрее и использует меньше памяти, чем хэш-таблица, когда количество записей в коллекции невелико. Если число узлов, вероятно, будет больше десяти, то хэш-таблица или HybridDictionary могут быть более подходящими.
Коллекция ListDictionary реализует свойства и методы интерфейсов ICollection и IDictionary.
Гибридная коллекция
Класс HybridDictionary предоставляет словарь, который адаптирует его поведение в соответствии с количеством пар ключ / значение в коллекции. Когда количество элементов невелико, каждый элемент хранится в ListDictionary, что дает преимущество в производительности. Поскольку размер коллекции превышает оптимальное число узлов для связанного списка, хранилище переключается на использование хэш-таблицы. Это делает HybridDictionary хорошим выбором, когда размер коллекции неизвестен.
Коллекция HybridDictionary реализует ICollection и IDictionary.
Коллекция StringCollection
Класс StringCollection - это коллекция на основе IList, в которой хранятся строки. Как и в других коллекциях, элементы могут дублироваться и могут быть пустыми.
Коллекция StringCollection реализует ICollection и IList.
Коллекция StringDictionary
Коллекция StringDictionary предоставляет аналогичную функциональность классу Hashtable. Основное различие между двумя типами словарей заключается в том, что в то время как хэш-таблица принимает объект для ключа и значения для каждого элемента, StringDictionary требует, чтобы оба были строками.
Ключ для каждого элемента в коллекции должен быть уникальным и не может быть нулевым. Ключ переводится в нижний регистр, когда он добавляется в словарь, поэтому невозможно добавить элементы, где ключи отличаются только использованием капитализации. Часть значения пары ключ / значение может быть нулевой, и дубликаты разрешены.
Коллекция NameValueCollection
Класс NameValueCollection аналогичен StringDictionary, поскольку он хранит пары строк. Однако в коллекции NameValueCollection они называются парами имя / значение, и нет необходимости использовать уникальные имена. Это означает, что в одном ключе можно хранить несколько значений. Затем значения могут быть просмотрены с помощью имени и возвращены в виде массива строк.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.