ArrayList — это динамический массив в Java, реализующий интерфейс List.
Он позволяет: ArrayList хранит свои элементы в обычном массиве объектов: transient Object[] elementData; Это не ссылка на List, а простой массив Object[], выделенный в куче. Кроме массива, ArrayList хранит: Шаг1: public boolean add(E e) { ensureCapacityInternal(size + 1); // Убедиться, что хватит места elementData[size++] = e; // Добавить элемент return true; } Метод ensureCapacityInternal(): Шаг 2: Увеличение массива (grow()) private void grow() { int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); // увеличение на 50% elementData = Arrays.copyOf(elementData, newCapacity); } Пример: Было: 10 элементов
Стало: 15 (10 + 5)
Потом: 22 → 33 → 49 → и т.д.
Операция grow() — дорогая, потому что создаётся новый массив и копируются все элементы. public E get(int index) { rangeCheck(index); // проверка: 0 <= index < size return (E) elementData[index]; } Очень быстро — просто доступ по ин