146. LRU 缓存

package leetcode;

import java.util.HashMap;
import java.util.LinkedList;

public class demo_146 {
    private HashMap<Integer, Integer> map;
    //LinkList是一个双向链表
    private LinkedList<Integer> list;
    private int capacity;
    public demo_146(int capacity) {
        // TODO Auto-generated constructor stub
        map=new HashMap<Integer, Integer>();
        list=new LinkedList<Integer>();
        this.capacity=capacity;
    }
    
    //每次把最久未使用的放在双链表的表尾
    //每次把最新使用的放在双链表的表头
    public int get(int key) {
        if(map.containsKey(key)) {
            //LinkList中参数一定要是Integer类型,int类型传入时会被认为是index
            Integer keys=Integer.valueOf(key);
            //更新map中刚查找的元素在双链表中的位置
            list.remove(keys);
            list.addFirst(keys);
            return map.get(keys);
        }else {
            return -1;
        }
    }
    
    public void put(int key, int value) {
        Integer keys=Integer.valueOf(key);
        if(map.containsKey(keys)) {
            map.remove(keys);
            list.remove(keys);
        }else {
            if(map.size()>=capacity) {
                //删除双链表中最后的元素,也是最久未使用的元素
                map.remove(list.getLast());
                list.removeLast();
            }
        }
        map.put(keys, value);
        list.addFirst(keys);
    }
}

 

上一篇:如何在nginx代理后面的金字塔服务器中获取客户端的真实IP


下一篇:前端与数据库交互