Ответ
Коллекции в C# делятся на обобщённые (System.Collections.Generic) и необобщённые (System.Collections). В современной разработке используются почти исключительно обобщённые коллекции из-за типобезопасности и производительности.
Основные обобщённые коллекции:
-
List<T>— динамический массив. Быстрый доступ по индексу (O(1)), медленная вставка/удаление в середину (O(n)).var numbers = new List<int> { 1, 2, 3 }; numbers.Add(4); // Добавление в конец int second = numbers[1]; // Доступ по индексу -
Dictionary<TKey, TValue>— хеш-таблица. Быстрый доступ, добавление и удаление по ключу (в среднемO(1)). Ключи должны быть уникальными.var capitals = new Dictionary<string, string> { ["France"] = "Paris", ["Japan"] = "Tokyo" }; string city = capitals["Japan"]; // Получение по ключу -
HashSet<T>— коллекция уникальных элементов на основе хеш-таблицы. Оптимизирована для операций проверки принадлежности (Contains), объединения (UnionWith), пересечения (IntersectWith).var uniqueNumbers = new HashSet<int> { 1, 2, 2, 3 }; // Результат: {1, 2, 3} bool added = uniqueNumbers.Add(2); // Вернёт false, так как 2 уже есть -
Queue<T>— коллекция по принципу FIFO (First-In-First-Out).var queue = new Queue<string>(); queue.Enqueue("First"); queue.Enqueue("Second"); string firstItem = queue.Dequeue(); // Вернёт "First" -
Stack<T>— коллекция по принципу LIFO (Last-In-First-Out).var stack = new Stack<string>(); stack.Push("First"); stack.Push("Second"); string topItem = stack.Pop(); // Вернёт "Second" -
LinkedList<T>— двусвязный список. Очень быстрая вставка и удаление в любом месте (O(1)), если есть ссылка на узел, но медленный доступ по индексу (O(n)).
Выбор коллекции:
- Используйте
List<T>по умолчанию для простых списков. - Используйте
Dictionary<TKey, TValue>для быстрого поиска по ключу. - Используйте
HashSet<T>, когда важна уникальность и быстрая проверка наличия элемента. - Необобщённые коллекции (
ArrayList,Hashtable) считаются устаревшими и их следует избегать из-за проблем с производительностью (упаковка/распаковка) и типобезопасностью.
Видео-ответы
▶
▶
▶
▶
▶
▶