Часто используемые типы коллекций
Типы коллекции — это распространенные виды коллекций данных, такие как хэш-таблицы, очереди, стеки, контейнеры, словари и списки.
Коллекции основаны на интерфейсах 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).
Связанные разделы
Заголовок |
Описание |
---|---|
Описание возможностей массивов, которые позволяют рассматривать их как коллекции. |
|
Описание возможностей универсальных и нестандартных списков, которые являются наиболее часто используемыми типами коллекций. |
|
Описание возможностей универсальных и нестандартных типов словарей, основанных на хэше. |
|
Описывает классы, которые предоставляют функции сортировки списков и наборов. |
|
Описание возможностей универсальных и нестандартных очередей. |
|
Описание возможностей универсальных и нестандартных стеков. |
|
Описание универсального типа коллекции System.Collections.Generic.HashSet<T>. |
|
Описание операций установки значений, предоставляемых типом коллекции System.Collections.Generic.HashSet<T>, и операций установки значений в LINQ. |
|
Обсуждение различных типов коллекций, доступных в .NET Framework, включая стеки, очереди, списки, массивы и структуры. |
|
Описание универсальных шаблонов, включая универсальные коллекции, делегаты и интерфейсы, предоставляемые .NET Framework. Содержит ссылки на документацию для C#, Visual Basic и Visual C++, а также на вспомогательные технологии, такие как отражение. |
Ссылки
System.Collections.ICollection
System.Collections.Generic.ICollection<T>
System.Collections.Generic.IList<T>