[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-collections-kak-ispolzuya-linkedhashmap-sdelat-kesh-s-invalidation-policy":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},504,"kak-ispolzuya-linkedhashmap-sdelat-kesh-s-invalidation-policy",12,"collections","Collections","📚","Как, используя LinkedHashMap, сделать кэш с invalidation policy","Для создания LRU-кэша (Least Recently Used) нужно использовать `LinkedHashMap` с режимом access-order и переопределить метод `removeEldestEntry()`.\n\n```java\npublic class LRUCache\u003CK, V> extends LinkedHashMap\u003CK, V> {\n    private final int maxSize;\n\n    public LRUCache(int maxSize) {\n        super(maxSize, 0.75f, true); \u002F\u002F true = access-order\n        this.maxSize = maxSize;\n    }\n\n    @Override\n    protected boolean removeEldestEntry(Map.Entry\u003CK, V> eldest) {\n        return size() > maxSize;\n    }\n}\n```\n\nКак это работает:\n\n- Параметр `accessOrder = true` в конструкторе включает режим, при котором каждое обращение к элементу (`get()`, `put()`) перемещает его в конец списка.\n- Наименее используемые элементы группируются в начале списка.\n- `removeEldestEntry()` вызывается после каждого `put()`\u002F`putAll()` и, если возвращает true, удаляет самый старый элемент (eldest — первый в списке).\n\nОграничение: при вставке элемента с уже существующим ключом порядок итерации не изменяется в режиме insertion-order, но изменяется в access-order. Для production-кода лучше использовать Caffeine или Guava Cache, которые поддерживают TTL, размерные ограничения и метрики.\n\n> **На собеседовании:** покажите код LRU-кэша на LinkedHashMap. Объясните три ключевых момента: accessOrder = true, removeEldestEntry() и ограничения подхода.","","middle",[15,16,17],"performance","jcf","caching",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":36,"featuredSnippetReady":37},"LRU-кэш на LinkedHashMap — removeEldestEntry — Gymterview","LinkedHashMap с accessOrder=true + переопределение removeEldestEntry(). Наименее используемый элемент удаляется автоматически. Для production — Caffeine\u002FGuava.","LRU-кэш на LinkedHashMap — Gymterview","accessOrder=true + removeEldestEntry(). LRU: обращение перемещает в конец. Для production — Caffeine.",[26,27,28,29,30,31,32,33,34,35],"LinkedHashMap","LRU","кэш","accessOrder","removeEldestEntry","Caffeine","Guava Cache","invalidation","Java","собеседование","LinkedHashMap с accessOrder=true: get()\u002Fput() перемещают элемент в конец. Переопределить removeEldestEntry() для удаления при size > maxSize. Ограничение: нет TTL, нет метрик. Для production — Caffeine Cache.",true]