LRUCache实现lru(最近最少)算法

2,464 阅读1分钟

#1、lru算法背景 设计实现一个LRU(最近最少缓存)使用机制。它应该支持以下操作获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key), 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。 #2、代码实现 ` public class LRUCache {

/**
 * 容量
 */
private int cap;

/**
 * 定义一个链表
 */
private Map<Integer, Integer> map = new LinkedHashMap<Integer,Integer>();

LinkedList list = new LinkedList<Integer>();
public LRUCache(int capacity){
    this.cap = capacity;
}

public int getKey(int key){
    //
    if (map.keySet().contains(key)){
        int value = map.get(key);
        //链表删除原有的key放入,最新使用,将其添加到尾部
        map.remove(key);
        //保证每次查询后,都在末尾
        map.put(key,value);
        return value;
    }
    return -1;
}

public void put(int key, int value){
    if (map.keySet().contains(key)){
        map.remove(key);
    }else if (map.size() == cap){
        //达到最大长度了,移除头部的节点(最少使用)
        Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
        iterator.next();
        iterator.remove();
    }
    map.put(key,value);
}

`