Выбор ответа Junior Коллекции и LINQ спрашивают часто обновлено

Как растёт List<T>

Вопрос

Что происходит, когда в List<T> с Count == Capacity добавляют элемент?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Выделяется массив вдвое больше, элементы копируются в него. List<T хранит элементы в массиве.

Варианты ответа

  1. Элемент пишется в новый связанный блок памяти, копирования нет
  2. Ёмкость увеличивается ровно на один элемент, массив копируется
  3. Бросается InvalidOperationException: Capacity нужно задать заранее
  4. Выделяется массив вдвое больше, элементы копируются в негоправильный ответ

Разбор

List<T> хранит элементы в массиве. При нехватке места он создаёт массив вдвое больше (начиная с 4) и копирует туда всё. Поэтому Add в среднем O(1), но отдельный вызов может стоить O(n). Если размер известен, ёмкость задают в конструкторе. Связанных блоков у List<T> нет, это устройство LinkedList<T>. Исключения при росте нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.