Sobes.tech
Senior
29

Если capacity слайса переполнена и добавляется новый элемент — что происходит?

Companies where asked
.wrk

Answer from AI

sobes.tech AI

В C# слайс (List<T>) имеет внутренний массив с определённой ёмкостью (capacity). Когда количество элементов достигает этой ёмкости и добавляется новый элемент, происходит следующее:

  • Создаётся новый внутренний массив с увеличенной ёмкостью (обычно в 2 раза больше текущей).
  • Содержимое старого массива копируется в новый.
  • Новый элемент добавляется в новый массив.
  • Ссылка на внутренний массив обновляется.

Это означает, что добавление элемента при переполнении capacity — операция затратная по времени из-за копирования.

Пример:

var list = new List<int>(2); // capacity = 2
list.Add(1);
list.Add(2);
// capacity достигнута
list.Add(3); // создаётся новый массив с capacity = 4, копируются элементы, добавляется 3

Поэтому, если заранее известен примерный размер, лучше инициализировать List с нужной capacity, чтобы избежать частых перераспределений.