Поделиться через


Часто используемые типы коллекций

Обновлен: Ноябрь 2007

Типы коллекции — это распространенные виды коллекций данных, такие как хэш-таблицы, очереди, стеки, словари и списки.

Коллекции основаны на интерфейсах ICollection, IList, IDictionary или на их универсальных аналогах. Интерфейсы IList и IDictionary являются производными от интерфейса ICollection. Следовательно, все коллекции прямо или косвенно основаны на интерфейсе ICollection. В коллекциях, основанных на интерфейсе IList (таких как Array, ArrayList или List<T>) или непосредственно на интерфейсе ICollection (таких как Queue, Stack или LinkedList<T>), каждый элемент содержит только значение. В коллекциях, основанных на интерфейсе IDictionary (таких как классы Hashtable, SortedList или универсальные классы Dictionary<TKey, TValue> и SortedList<TKey, TValue>) каждый элемент содержит и ключ, и значение. Класс KeyedCollection<TKey, TItem> является уникальным, так как он представляет собой список значений с внедренными в них ключами и, таким образом, функционирует и как список, и как словарь.

Универсальные коллекции являются наилучшим решением для строгой типизации. Однако, если язык не поддерживает универсальные шаблоны, пространство имен System.Collections содержит базовые коллекции, такие как CollectionBase, ReadOnlyCollectionBase и DictionaryBase, являющиеся абстрактными базовыми классами, которые могут быть расширены для создания классов строго типизированных коллекций.

Коллекции могут различаться по тому, как элементы хранятся, как они сортируются, как производится поиск и как выполняются сравнения. Класс Queue и универсальный класс Queue<T> предоставляют списки FIFO, а класс Stack и универсальный класс Stack<T> — списки LIFO. Класс SortedList и универсальный класс SortedList<TKey, TValue> предоставляют сортируемые версии класса Hashtable и универсального класса Dictionary<TKey, TValue>. К элементам Hashtable или Dictionary<TKey, TValue> можно получить доступ только по ключу. К элементам SortedList или KeyedCollection<TKey, TItem> можно получить доступ как по ключу, так и по индексу элемента. Индексы во всех коллекциях отсчитываются от нуля, за исключением Array, в котором допускаются массивы с индексацией не от нуля.

Функция LINQ to Objects позволяет использовать LINQ запросы для доступа к объектам в памяти, если тип объекта реализует IEnumerable или IEnumerable<T>. LINQ запросы предоставляют общий шаблон для доступа к данным, являются более четкими и удобочитаемыми, чем стандартные циклы foreach, а также предоставляют возможности фильтрации, сортировки и группировки. LINQ запросы также могут повысить производительность. Дополнительные сведения см. в разделе LINQ to Objects.

В этом подразделе

Ссылка

  • System.Collections
    Предоставляет справочную документацию по пространству имен System.Collections, содержащему интерфейсы и классы, которые определяют различные коллекции объектов.

  • System.Collections.Generic
    Справочная документация по пространству имен System.Collections.Generic, содержащему интерфейсы и классы, которые определяют универсальные коллекции.

  • System.Collections.ICollection
    Описание основных возможностей класса ICollection, который определяет размер, перечисления и методы синхронизации для всех неуниверсальных коллекций.

  • System.Collections.Generic.ICollection<T>
    Описание основных возможностей класса ICollection<T>, который определяет методы обработки универсальных коллекций.

  • System.Collections.IList
    Описание основных возможностей класса IList, который представляет нестандартную коллекцию объектов, доступ к которым может осуществляться по индексу.

  • System.Collections.Generic.IList<T>
    Описание основных возможностей класса IList<T>, который представляет коллекцию объектов, доступ к которым может осуществляться по индексу.

  • System.Collections.IDictionary
    Описание основных возможностей класса IDictionary, который представляет нестандартную коллекцию пар "ключ-значение".

  • System.Collections.Generic.IDictionary<TKey, TValue>
    Описание основных возможностей класса IDictionary<TKey, TValue>, который представляет универсальную коллекцию пар "ключ-значение".

Связанные подразделы

  • Коллекции и структуры данных
    Обсуждение различных типов коллекций, доступных в .NET Framework, включая стеки, очереди, списки, массивы и структуры.

  • Универсальные шаблоны в платформе .NET Framework
    Описание универсальных шаблонов, включая универсальные коллекции, делегаты и интерфейсы, предоставляемые .NET Framework. Содержит ссылки на документацию для C#, Visual Basic и Visual C++, а также на вспомогательные технологии, такие как отражение.