Я просматриваю этот пост, чтобы понять LRUCache в Java - Кэш Java LRU с использованием LinkedList
В этом посте есть решение:
public class LRUCache {
private Map<Integer, Integer> blocks = new HashMap<Integer, Integer>();
private LinkedList<Integer> bru = new LinkedList<Integer>();
private int capacity;
private int length;
public LRUCache(int capacity) {
this.capacity = capacity;
this.length = 0;
}
public int get(int key) {
Integer value = blocks.get(key);
if (value != null) {
bru.remove(value);
bru.addFirst(value);
return value;
}
return -1;
}
public void set(int key, int value) {
if (blocks.containsKey(key)) {
bru.remove(blocks.get(key));
blocks.put(key, value);
} else {
if (length >= capacity) {
blocks.remove(bru.removeLast());
length--;
}
length++;
blocks.put(key, value);
}
bru.addFirst(value);
}
}
В этой программе карта blocks - это фактическая карта, которая содержит требуемые значения. тогда зачем нам здесь другая коллекция bru LinkedList?




Map<Integer, Integer> blocks - это фактический, который содержит требуемые значения,
в то время как LinkedList<Integer> bru используется для хранения значений недавно посетил.
Это необходимо. blocks.size() возвращает текущий размер, который меньше или равен length (возможности)
Спасибо, а нам нужна переменная длины в программе? потому что мы можем использовать blocks.size (), чтобы узнать длину.