Согласитесь .. Забери мой комментарий

трел на проблему реализации кэша LRU, когда после заполнения кеша выталкивается наименее использованный элемент, который заменяется новым.

Я имею в виду две реализации:

1). Создайте две карты, которые выглядят примерно так

std::map<timestamp, k> time_to_key
std::map<key, std::pair<timestamp, V>> LRUCache

Чтобы вставить новый элемент, мы можем поместить текущую метку времени и значение вLRUCache, Хотя, когда размер кэша заполнен, мы можем удалить самый последний элемент, найдя наименьшую временную метку ввремя_to_ключ и удалив соответствующий ключ изLRUCache, Вставка нового элемента - O (1), обновление временной метки - O (n) (потому что мы должны искатьk соответствующий отметке времени ввремя_to_ключ.

2). Имейте связанный список, в котором наименее использованный кеш присутствует в заголовке, а новый элемент добавляется в конец. Когда прибывает элемент, который уже присутствует в кэше, узел, соответствующий ключу этого элемента, перемещается в конец списка. Вставка нового элемента - это O (1), обновление отметки времени - снова O (n) (потому что нам нужно перейти к концу списка), а удаление элемента - это O (1).

Теперь у меня есть следующие вопросы:

Какая из этих реализаций лучше для LRUCache.

Есть ли другой способ реализовать LRU Cache.

В Java, я должен использовать HashMap для реализации LRUCache

Я видел такие вопросы, как реализация общего LRU-кэша, а также такие вопросы, как реализация LRU-кэша. Отличается ли общий кэш LRU от кеша LRU?

Заранее спасибо!!!

РЕДАКТИРОВАТЬ:

Другой способ (самый простой способ) реализовать LRUCache в Java - использовать LinkedHashMap и переопределить логическую функцию removeEldestEntry (Map.entry eldest).

Ответы на вопрос(9)

Ваш ответ на вопрос