Вопрос проверяет понимание влияния памяти и аппаратных факторов на реальную производительность.
ArrayList хранит данные в непрерывной области памяти.
Это хорошо работает с кэшами процессора.LinkedList использует разрозненные объекты и ссылки.
Из-за этого возникает много кэш-промахов.
В реальных приложениях ArrayList часто оказывается быстрее.
Хотя асимптотика иногда выглядит в пользу LinkedList, реальная производительность определяется не только ей.
ArrayList:
Элементы лежат подряд в памяти.
Процессор эффективно загружает их в кэш.
Последовательный обход очень быстрый.
LinkedList:
Каждый элемент — отдельный объект.
Узлы разбросаны по куче.
Каждый переход — переход по ссылке.
У LinkedList:
Больше объектов.
Больше памяти.
Больше работы для GC.
Каждый Node содержит:
значение
ссылку на следующий
ссылку на предыдущий
На практике:
ArrayList выигрывает в большинстве сценариев.
LinkedList оправдан только при частых вставках/удалениях по известному узлу.
Даже add/remove в середине часто быстрее у ArrayList.
ArrayList чаще быстрее LinkedList из-за лучшей локальности памяти, меньшего количества объектов и эффективной работы кэша.