Выбор ответа Junior Коллекции и LINQ спрашивают часто обновлено
Как растёт List<T>
Вопрос
Что происходит, когда в List<T> с Count == Capacity добавляют элемент?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Выделяется массив вдвое больше, элементы копируются в него. List<T хранит элементы в массиве.
Варианты ответа
- Элемент пишется в новый связанный блок памяти, копирования нет
- Ёмкость увеличивается ровно на один элемент, массив копируется
- Бросается
InvalidOperationException: Capacity нужно задать заранее - Выделяется массив вдвое больше, элементы копируются в негоправильный ответ
Разбор
List<T> хранит элементы в массиве. При нехватке места он создаёт массив вдвое больше (начиная с 4) и копирует туда всё. Поэтому Add в среднем O(1), но отдельный вызов может стоить O(n). Если размер известен, ёмкость задают в конструкторе. Связанных блоков у List<T> нет, это устройство LinkedList<T>. Исключения при росте нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.