Sobes.tech
Назад к вопросам
Senior
7

Какую коллекцию использовать для LRU-кэша с удалением самого старого элемента при переполнении?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

Для реализации LRU-кэша в Java часто используют класс LinkedHashMap с переопределением метода removeEldestEntry. Этот класс поддерживает порядок вставки или доступа к элементам, что позволяет легко удалять самый старый (наименее недавно использованный) элемент при переполнении.

Пример:

import java.util.LinkedHashMap;
import java.util.Map;

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private final int capacity;

    public LRUCache(int capacity) {
        super(capacity, 0.75f, true); // true для порядка доступа
        this.capacity = capacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > capacity;
    }
}

Здесь LinkedHashMap с параметром accessOrder=true поддерживает порядок доступа, а метод removeEldestEntry автоматически удаляет самый старый элемент при превышении размера кэша.