ArrayList использует массив объектов для внутреннего хранения данных.
Когда вы инициализируете ArrayList, создается массив размером 10 ( емкость по умолчанию ), и элемент, добавленный в ArrayList, фактически добавляется в этот массив. 10 является размером по умолчанию, и его можно передать в качестве параметра при инициализации ArrayList.
При добавлении нового элемента, если массив заполнен, то создается новый массив на 50% больше первоначального размера, и последний массив копируется в этот новый массив, так что теперь для нового элемента есть пустые места для быть добавленным.
Поскольку используемая базовая структура данных является массивом, довольно легко добавить новый элемент в ArrayList, так как он добавляется в конец списка. Когда элемент должен быть добавлен где-либо еще, скажем, в начале, тогда все элементы должны переместиться на одну позицию вправо, чтобы создать пустое место в начале для нового элемента, который будет добавлен. Этот процесс трудоемкий (линейное время) . Но преимущество ArrayList состоит в том, что извлечение элемента в любой позиции очень быстро (постоянное время) , поскольку в основе его лежит просто использование массива объектов.