Java LRUCache,为什么我们需要另一个集合



我将通过这篇文章来了解Java中的LRUCache-使用LinkedList 的Java LRU缓存

这篇文章中有一个解决方案:

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映射是保存所需值的实际映射。那么为什么我们在这里需要其他集合bruLinkedList?

Map<Integer, Integer> blocks是保存所需值的实际值,

而CCD_ 4用于存储最近访问的值。

最新更新