Какви видове колекции съществуват в C#?
sobes.tech AI
Отговор от 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.