Я хочу построить быстрый кеш LRU. Является ли такое решение хорошим способом сделать это? А как насчет синхронизации?LRU лучший способ выполнить быструю реализацию в java
Существует защищенный метод, называемый removeEldestEntry. Этот метод вызывается, когда элементы добавляются к карте. Реализация по умолчанию возвращает false. Но я могу подклассировать LinkedHashMap и переопределить этот метод, чтобы проверить, достигнут ли максимальный размер, а затем просто вернуть true. LinkedHashMap найдет самую старую запись через связанный список и загрузите ее перед добавлением новой записи.
public class MyLRUMap<K,V> extends LinkedHashMap<K,V> {
private int maxCapacity;
public MyLRUMap(int initialCapacity, float loadFactor, int maxCapacity) {
super(initialCapacity, loadFactor, true);
this.maxCapacity = maxCapacity;
}
@Override
protected boolean removeEldestEntry(Entry<K,V> eldest) {
return size() >= this.maxCapacity;
}
}
Благодаря
Это b ecause метод removeEldest вызывается после того, как вставлен новый элемент? Если i do> =, моя карта будет поддерживать maxCapacity -1 как размер? –
Правильно, в соответствии с Javadoc, removeEldest называется AFTER put() и putAll() – dkatzel