Выбор ответа Middle Коллекции изнутри спрашивают часто обновлено

LRU-кеш на стандартной коллекции

Вопрос

Какой класс проще всего превратить в LRU-кеш?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: LinkedHashMap с accessOrder = true и removeEldestEntry. LinkedHashMap держит двусвязный список узлов.

Варианты ответа

  1. TreeMap с компаратором по времени последнего доступа к ключу
  2. HashMap с периодической очисткой старых записей по таймеру
  3. PriorityQueue по времени последнего обращения к элементу
  4. LinkedHashMap с accessOrder = true и removeEldestEntryправильный ответ

Разбор

LinkedHashMap держит двусвязный список узлов. В режиме accessOrder каждый get переносит узел в конец, а removeEldestEntry после вставки удаляет самый старый, если превышен размер. Всё O(1). TreeMap по времени потребует удалять и вставлять заново при каждом доступе (O(log n)) и отдельно хранить время. HashMap порядка не знает. PriorityQueue не умеет быстро обновлять приоритет элемента.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме