[LeetCode] 146. LRU Cache java__LeetCode

來源:互聯網
上載者:User
/**146. LRU Cache     * @date: 2016年10月27日     * @description: http://blog.csdn.net/sbitswc/article/details/35899935*/private HashMap<Integer, DoubleLinkedListNode> map         = new HashMap<Integer, DoubleLinkedListNode>();    private DoubleLinkedListNode head;    private DoubleLinkedListNode end;    private int capacity;    private int len;    public LRUCache(int capacity) {        this.capacity = capacity;        len = 0;    }    public int get(int key) {        if (map.containsKey(key)) {            DoubleLinkedListNode latest = map.get(key);            removeNode(latest);            setHead(latest);            return latest.val;        } else {            return -1;        }    }    public void removeNode(DoubleLinkedListNode node) {        DoubleLinkedListNode cur = node;        DoubleLinkedListNode pre = cur.pre;        DoubleLinkedListNode post = cur.next;        if (pre != null) {            pre.next = post;        } else {            head = post;        }        if (post != null) {            post.pre = pre;        } else {            end = pre;        }    }    public void setHead(DoubleLinkedListNode node) {        node.next = head;        node.pre = null;        if (head != null) {            head.pre = node;        }        head = node;        if (end == null) {            end = node;        }    }    public void set(int key, int value) {        if (map.containsKey(key)) {            DoubleLinkedListNode oldNode = map.get(key);            oldNode.val = value;            removeNode(oldNode);            setHead(oldNode);        } else {            DoubleLinkedListNode newNode =                 new DoubleLinkedListNode(key, value);            if (len < capacity) {                setHead(newNode);                map.put(key, newNode);                len++;            } else {                map.remove(end.key);                end = end.pre;                if (end != null) {                    end.next = null;                }                setHead(newNode);                map.put(key, newNode);            }        }    }}class DoubleLinkedListNode {    public int val;    public int key;    public DoubleLinkedListNode pre;    public DoubleLinkedListNode next;    public DoubleLinkedListNode(int key, int value) {        val = value;        this.key = key;    }

轉:http://www.cnblogs.com/springfor/p/3869393.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.