В чем разница между использованием списка (List) и массива в C#?

«В чем разница между использованием списка (List) и массива в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основное отличие между List<T> и массивом (T[]) в C# заключается в динамичности размера и уровне абстракции.

Массив (T[]):

  • Фиксированный размер: Размер определяется при создании и не может быть изменен.
  • Высокая производительность: Прямой доступ по индексу с минимальными накладными расходами.
  • Синтаксис инициализации: int[] arr = new int[5] { 1, 2, 3, 4, 5 }; или int[] arr = { 1, 2, 3 };.
  • Использование: Идеален для данных, размер которых известен заранее и не меняется (например, дни недели, цвета радуги).

Список (List<T>):

  • Динамический размер: Автоматически увеличивает свою внутреннюю емкость при добавлении элементов.
  • Богатый API: Предоставляет методы для добавления (Add), удаления (Remove), поиска (Find, Where с LINQ) и другие.
  • Реализация: Внутри использует массив для хранения данных, управляя его перераспределением.
  • Использование: Основной выбор для работы с коллекциями, размер которых может изменяться во время выполнения программы.

Пример кода и ключевое отличие:

// Массив - фиксированный размер
string[] fixedArray = new string[2] { "A", "B" };
// fixedArray[2] = "C"; // Вызовет IndexOutOfRangeException

// List<T> - динамический размер
List<string> dynamicList = new List<string> { "A", "B" };
dynamicList.Add("C"); // Успешно. Внутренний массив будет расширен при необходимости.
dynamicList.Remove("A"); // Успешно.

Практическое правило: Используйте массив для высокопроизводительных операций с данными постоянного размера. Во всех остальных случаях List<T> является более удобным и безопасным выбором благодаря своей гибкости.