В любом языке программирования массив — единственный способ сохранить коллекцию объектов. Все остальные коллекции — это просто оболочки над массивом с некоторыми дополнительными функциями. Например, нам не нужно указывать размер списка, но нам нужно указать размер массива. Всякий раз, когда вы инициализируете List, Dictionary, HashSet или любую другую коллекцию, массив инициализируется размером 4, это число 4 является начальной емкостью коллекции. Поскольку List не требует указания размера, он сам будет управлять внутренними массивами.

Нам нужно понять, как List будет управлять внутренними массивами. Когда мы добавляем 5-й элемент в список, он знает, что текущий массив не может содержать 5 элементов. Теперь список создаст другой массив с размером предыдущей емкости, умноженной на 2, что в данном случае будет равно 8. Все элементы старого массива будут скопированы во вновь созданный массив, а новый элемент будет добавлен после этого. . Этот процесс продолжится, когда емкость списка достигнет своего предела.

Если мы хотим создать список, который, как ожидается, будет хранить 100 тыс. элементов, и мы не указали начальную емкость. Емкость List будет изменяться заданным образом 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2028, 4056, 8112, 16224, 32448, 64896, 129792. Всего будет создано 17 массивов с совокупный размер 259600. Нам просто нужен 17-й массив, который содержит 100 тыс. элементов и теперь может хранить еще 30 тыс. элементов. GC соберет 16 массивов, которые больше не нужны, а блокирующий характер GC повлияет на производительность.

Используйте массив, если вы точно знаете размер коллекции, и укажите ожидаемую емкость коллекции, когда использование массива невозможно. Результат сравнительного анализа прилагается для подкрепления моего аргумента.