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, чтобы избежать частых перераспределений.