https://leetcode.com/problems/lru-cache/
这里参考http://www.cnblogs.com/zuoyuan/p/3701572.html,
思路比较清晰。用double linkedlist and hashmap
get和set的时候,都要remove以及addFirst to the doubleLinkedList
查询:
根据键值查询hashmap,若命中,则返回节点key值对应的value,否则返回-1。
从双向链表中删除命中的节点,将其重新插入到表头。注意这里要先删除,再插入到head
所有操作的复杂度均为O(1)。
插入:
将新的节点关联到Hashmap
如果Cache满了,删除双向链表的尾节点,同时删除Hashmap对应的记录
将新的节点插入到双向链表中头部
更新:
和查询相似
删除:
从双向链表和Hashmap中同时删除对应的记录。