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


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

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

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

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

Коллекции могут различаться по тому, как элементы хранятся, как они сортируются, как производится поиск и как выполняются сравнения. Класс 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 и Parallel LINQ (PLINQ).

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

Заголовок

Описание

Тип коллекций Array

Описание возможностей массивов, которые позволяют рассматривать их как коллекции.

Типы коллекций ArrayList и List

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

Типы коллекций Hashtable и Dictionary

Описание возможностей универсальных и нестандартных типов словарей, основанных на хэше.

Отсортированные типы коллекций

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

Тип коллекций Queue

Описание возможностей универсальных и нестандартных очередей.

Типы коллекций Stack

Описание возможностей универсальных и нестандартных стеков.

Тип коллекции HashSet

Описание универсального типа коллекции System.Collections.Generic.HashSet<T>.

Операции над множествами в HashSet и LINQ

Описание операций установки значений, предоставляемых типом коллекции System.Collections.Generic.HashSet<T>, и операций установки значений в LINQ.

Коллекции и структуры данных

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

Универсальные шаблоны в платформе .NET Framework

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

Ссылки

System.Collections

System.Collections.Generic

System.Collections.ICollection

System.Collections.Generic.ICollection<T>

System.Collections.IList

System.Collections.Generic.IList<T>

System.Collections.IDictionary

System.Collections.Generic.IDictionary<TKey, TValue>