У меня есть класс, который расширяет LinkedHashMap
, который я использую в качестве кеша. Этот кеш имеет свойство, которое определяет максимальный размер в байтах, который позволяет хранить кеш. Я использую приблизительную оценку размера объектов, которые храню.LinkedHashMap removeEldestEntry and Overriding Удалить
I override put
, так что я обновляю общий размер, хранящийся в кеше.
Я также переопределяю remove
, чтобы вычесть размер объекта, который я удалил из общей суммы.
На данный момент я проверяю, нужно ли мне удалять устаревшие записи из кеша, чтобы освободить место при добавлении нового значения в методе put
, однако я хотел бы переместить эту функциональность на реализацию removeEldestEntry
способ.
Проблема, с которой я столкнулся, состоит в том, что кажется, что мой переопределенный removeEldestEntry
возвращает true
, мой переопределенный метод remove
не вызывается. Это приводит к проблеме, когда моя текущая сохраненная переменная размера не обновляется, когда removeEldestEntry
удаляет устаревшие записи.
Кто-нибудь знает, какой путь кода используется для удаления старшей записи, когда removeEldestEntry
возвращает true
. Возможно ли переопределить метод, который используется для удаления записей?
Возможно ли выполнить мой расчет обновлений, когда LinkedHashMap
вызывает удаление на removeEldestEntry
.
Я знаю, что api позволяет выполнять фактическое удаление в методе removeEldestEntry
, пока вы возвращаете false после этого, однако я хочу изучить другие варианты, прежде чем делать это. Я рассматриваю это как последний сценарий.
Спасибо Энди. RemoveNode является окончательным, поэтому я не могу переопределить это. Я думаю, что лучшим решением для меня является либо реализация оболочки, как вы предложили, либо вызов метода remove вручную в removeEldestEntry и возврат false из него, как предлагает API. – Kialandei