Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: cache, locality

Почему на практике ArrayList часто быстрее LinkedList, несмотря на асимптотику?

Вопрос проверяет понимание влияния памяти и аппаратных факторов на реальную производительность.

Короткий ответ

ArrayList хранит данные в непрерывной области памяти.
Это хорошо работает с кэшами процессора.
LinkedList использует разрозненные объекты и ссылки.
Из-за этого возникает много кэш-промахов.
В реальных приложениях ArrayList часто оказывается быстрее.

Длинный ответ

Хотя асимптотика иногда выглядит в пользу LinkedList, реальная производительность определяется не только ей.

Локальность данных

ArrayList:

  1. Элементы лежат подряд в памяти.

  2. Процессор эффективно загружает их в кэш.

  3. Последовательный обход очень быстрый.

LinkedList:

  1. Каждый элемент — отдельный объект.

  2. Узлы разбросаны по куче.

  3. Каждый переход — переход по ссылке.

Стоимость ссылок

У LinkedList:

  1. Больше объектов.

  2. Больше памяти.

  3. Больше работы для GC.

Каждый Node содержит:

  • значение

  • ссылку на следующий

  • ссылку на предыдущий

Практические последствия

На практике:

  1. ArrayList выигрывает в большинстве сценариев.

  2. LinkedList оправдан только при частых вставках/удалениях по известному узлу.

  3. Даже add/remove в середине часто быстрее у ArrayList.

Краткий вывод

ArrayList чаще быстрее LinkedList из-за лучшей локальности памяти, меньшего количества объектов и эффективной работы кэша.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#cache

#locality

Подпишись на Java Developer в телеграм