Как происходит удаление элементов из ArrayList
При удалении элемента из ArrayList все элементы правее удаляемого сдвигаются на одну позицию влево через System.arraycopy(), а в последнюю позицию записывается null (для помощи GC). Значение size уменьшается на 1, но реальный размер внутреннего массива (capacity) не изменяется.
Автоматического сжатия массива в ArrayList не предусмотрено. Если после удаления большого количества элементов нужно освободить неиспользуемую память, можно вызвать trimToSize() — этот метод создаст новый массив размером size и скопирует в него оставшиеся элементы.
Сложность удаления: O(N) в общем случае (из-за сдвига элементов), O(1) для удаления последнего элемента.
На собеседовании: упомяните сдвиг элементов через System.arraycopy(), отсутствие автоматического сжатия и метод trimToSize().