Коллекции в C#

В C# существует несколько типов коллекций, предоставляемых пространством имен System.Collections и System.Collections.Generic. Они предназначены для хранения и управления наборами данных.

Коллекции в System.Collections

Эти коллекции не являются типизированными, что означает, что они могут хранить объекты любого типа.

  • ArrayList – динамический массив, способный изменять размер.
  • Hashtable – хэш-таблица, использующая ключи и значения.
  • Queue – очередь (FIFO — первым вошел, первым вышел).
  • Stack – стек (LIFO — последним вошел, первым вышел).

Коллекции в System.Collections.Generic

Это обобщенные коллекции, которые обеспечивают безопасность типов и лучшую производительность.

  • List<T> – динамический массив, аналог ArrayList, но типизированный.
  • Dictionary<TKey, TValue> – хэш-таблица с ключами и значениями определенного типа.
  • Queue<T> – обобщенная очередь.
  • Stack<T> – обобщенный стек.
  • HashSet<T> – коллекция уникальных элементов.
  • LinkedList<T> – двусвязный список.

Коллекции в System.Collections.Concurrent

Эти коллекции предназначены для многопоточного доступа.

  • ConcurrentBag<T> – неупорядоченная коллекция для конкурентного использования.
  • ConcurrentQueue<T> – потокобезопасная очередь.
  • ConcurrentStack<T> – потокобезопасный стек.
  • ConcurrentDictionary<TKey, TValue> – потокобезопасный словарь.

Immutable-коллекции (System.Collections.Immutable)

Коллекции, которые нельзя изменить после создания.

  • ImmutableList<T> – неизменяемый список.
  • ImmutableDictionary<TKey, TValue> – неизменяемый словарь.
  • ImmutableHashSet<T> – неизменяемый хэш-набор.
  • ImmutableQueue<T> – неизменяемая очередь.
  • ImmutableStack<T> – неизменяемый стек.

C# предоставляет широкий выбор коллекций для разных задач. Обобщенные коллекции подходят для большинства случаев, а потокобезопасные и неизменяемые коллекции полезны в многопоточных и функциональных сценариях.