Gymterview
junior

Зачем в ArrayList хранить отдельно size, если всегда можно взять elementData.length

Поле size хранит фактическое количество элементов в списке, тогда как elementData.length — это емкость (capacity) внутреннего массива, которая всегда больше или равна size.

ArrayList выделяет массив с запасом, чтобы не создавать новый массив при каждом add(). Например, после new ArrayList<>(10) массив имеет длину 10, но size = 0. После добавления трех элементов: elementData.length = 10, а size = 3. Ячейки с индексами 3-9 содержат null и не являются элементами списка.

Если бы вместо size использовался elementData.length, список считал бы null-ячейки элементами, что нарушило бы корректность методов get(), contains(), iterator() и других.

На собеседовании: объясните разницу между size (количество элементов) и capacity (размер массива). Покажите, что знаете, зачем ArrayList выделяет массив с запасом.