Назад к вопросам
IT One
Senior
7
Какую коллекцию использовать для LRU-кэша с удалением самого старого элемента при переполнении?
Компании, где спрашивали
Ответ от нейросети
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 автоматически удаляет самый старый элемент при превышении размера кэша.