Какие существуют типы коллекций в C#?
Answer from AI
sobes.tech AI
C# предлагает множество типов коллекций для хранения и управления данными, расположенных в различных пространствах имен (в основном System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Их можно классифицировать по нескольким основным признакам:
-
По типу хранимых данных:
- Нетипизированные (Untyped): Хранят объекты типа
object(System.Collections). Требуют приведения типов и могут быть менее производительными. - Типизированные (Generic): Хранят объекты определенного типа (
System.Collections.Generic). Предоставляют типобезопасность и лучшую производительность.
- Нетипизированные (Untyped): Хранят объекты типа
-
По структуре данных:
- Списки (Lists): Последовательные коллекции, доступ к элементам по индексу.
ArrayList(нетипизированный)List<T>(типизированный)LinkedList<T>(типизированный двусвязный список)
- Массивы (Arrays): Фиксированного размера, доступ по индексу.
Array(базовый класс)T[](синтаксический сахар для массивов)
- Словари (Dictionaries): Коллекции пар ключ-значение, доступ по ключу.
Hashtable(нетипизированный)Dictionary<TKey, TValue>(типизированный)SortedList(нетипизированный, отсортирован по ключу)SortedList<TKey, TValue>(типизированный, отсортирован по ключу)SortedDictionary<TKey, TValue>(типизированный, отсортирован по ключу, использует красно-черное дерево)
- Множества (Sets): Коллекции уникальных элементов.
HashSet<T>(типизированный, неупорядоченный)SortedSet<T>(типизированный, упорядоченный)
- Очереди (Queues): Коллекции, работающие по принципу "первым пришел, первым вышел" (FIFO).
Queue(нетипизированный)Queue<T>(типизированный)
- Стеки (Stacks): Коллекции, работающие по принципу "последним пришел, первым вышел" (LIFO).
Stack(нетипизированный)Stack<T>(типизированный)
- Списки (Lists): Последовательные коллекции, доступ к элементам по индексу.
-
По потокобезопасности:
- Непотокобезопасные: Большинство стандартных коллекций (
System.Collections,System.Collections.Generic). Требуют внешней синхронизации для многопоточной работы. - Потокобезопасные (Concurrent): Разработаны для безопасной работы в многопоточной среде без внешней блокировки (
System.Collections.Concurrent).ConcurrentBag<T>ConcurrentDictionary<TKey, TValue>ConcurrentQueue<T>ConcurrentStack<T>
- Непотокобезопасные: Большинство стандартных коллекций (
-
По изменяемости:
- Изменяемые (Mutable): Большинство коллекций, позволяют добавлять, удалять и изменять элементы.
- Неизменяемые (Immutable): Обеспечивают неизменность после создания (
System.Collections.Immutable). Любая операция изменения возвращает новую коллекцию.ImmutableArray<T>ImmutableList<T>ImmutableDictionary<TKey, TValue>ImmutableHashSet<T>ImmutableSortedSet<T>ImmutableQueue<T>ImmutableStack<T>
Выбор конкретного типа коллекции зависит от требований задачи: тип данных, необходимость доступа по индексу или ключу, требования к уникальности элементов, порядок хранения, производительность, потокобезопасность и изменяемость. Наиболее часто используемыми в современном C# являются типизированные коллекции из пространства имен System.Collections.Generic.