Что такое List<T> и чем отличаются Count и Capacity?

Что такое List<T> и чем отличаются Count и Capacity? List<T> — динамический обобщённый массив в .NET Count — фактическое количество элементов, значение хранится явно Capacity — объём внутреннего массива,…

Короткий ответ

Что ответить на собеседовании

Что такое List<T> и чем отличаются Count и Capacity? List<T> — динамический обобщённый массив в .NET Count — фактическое количество элементов, значение хранится явно Capacity — объём внутреннего массива, зарезервированного для элементов При добавлении объектов Count растёт, а Capacity увеличивается только после заполнения массива, обычно в 2 раза Count всегда не превышает Capacity, поскольку дополнительное место резервируется заранее для оптимизации Значение Count считывается за O(1), а Capacity показывает текущий доступный размер без нового перераспределения Коллекция хранит данные эффективно и расширяется динамически, не копируя массив…

Подробный разбор

Ответ с пояснениями

Что такое List<T> и чем отличаются Count и Capacity?

  • List<T> — динамический обобщённый массив в .NET
  • Count — фактическое количество элементов, значение хранится явно
  • Capacity — объём внутреннего массива, зарезервированного для элементов
  • При добавлении объектов Count растёт, а Capacity увеличивается только после заполнения массива, обычно в 2 раза
  • Count всегда не превышает Capacity, поскольку дополнительное место резервируется заранее для оптимизации
  • Значение Count считывается за O(1), а Capacity показывает текущий доступный размер без нового перераспределения
  • Коллекция хранит данные эффективно и расширяется динамически, не копируя массив при каждом добавлении

Подробный ответ

Основной ответ

List<T> — обобщённая коллекция пространства имён System.Collections.Generic в .NET. По сути, это динамический массив, способный автоматически увеличивать свой размер при добавлении новых элементов. Коллекция размещает значения последовательно в памяти, обеспечивая быстрый доступ по индексу и эффективное добавление в конец.

Свойство Count показывает, сколько элементов в данный момент фактически содержится в списке.

Свойство Capacity задаёт размер внутреннего массива, используемого для размещения элементов. Его значение может отличаться от Count: List<T> обычно резервирует некоторый запас памяти, чтобы реже выполнять перераспределение.

Ключевые моменты

  • Реализация Count: публичное свойство возвращает внутреннее поле с точным количеством добавленных элементов. Получение Count выполняется за O(1).
  • Реализация Capacity: свойство соответствует длине внутреннего массива (T[]), выполняющего роль буфера. Когда при добавлении Count достигает Capacity, вместимость, как правило, увеличивается в 2 раза, благодаря чему дорогостоящие аллокации происходят реже.
  • Расширение массива: если текущего места недостаточно, List создаёт новый массив увеличенного размера, переносит в него существующие данные и заменяет ссылку на старый массив. За счёт этого амортизированная сложность вставки сохраняется на уровне O(1).

Практический контекст

В прикладных проектах нередко стоит заранее контролировать Capacity, чтобы сократить количество аллокаций, особенно при загрузке больших объёмов данных, например во время десериализации. Для этого начальную вместимость можно указать в конструкторе List<T>, а методом TrimExcess — уменьшить Capacity до значения Count и освободить память. Такой способ повышает производительность и уменьшает фрагментацию памяти.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку