首页 » 未分类 » 正文

LRUMap的简单实现

定义:

LRUMap使用最近最少使用算法,当一个元素添加或者被访问,就是最近最多使用的,内部维护一个列表,表头是最近最少使用的元素,表尾是最近最多使用的,当一个元素添加或者被访问时候,这个元素会被移动到列表表尾,而当元素数量达到最大的时候,会从表头删除一个原色。

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class LruMap<K, V> {
    private Map<K, V> maps = new HashMap<K, V>();
    private List<K> keys = new LinkedList<K>();

    private int limit;

    public LruMap(int limit) {
        this.limit = limit;
    }

    public synchronized void put(K key, V value) {
        if (keys.size() >= limit) {
            maps.remove(keys.get(0));
            keys.remove(0);
        }

        maps.put(key, value);

        if (keys.contains(key)) {
            keys.remove(key);
        }
        keys.add(key);
    }

    public synchronized V get(K key) {
        if (keys.contains(key)) {
            keys.remove(key);
            keys.add(key);
        }

        return maps.get(key);
    }
}