您的位置:首页 > 文旅 > 美景 > 中国拟在建项目网官网_seo排名优化什么意思_青岛网站建设_郑州seo课程

中国拟在建项目网官网_seo排名优化什么意思_青岛网站建设_郑州seo课程

2024/12/22 15:14:53 来源:https://blog.csdn.net/2301_79308687/article/details/144466464  浏览:    关键词:中国拟在建项目网官网_seo排名优化什么意思_青岛网站建设_郑州seo课程
中国拟在建项目网官网_seo排名优化什么意思_青岛网站建设_郑州seo课程

分析

维护一个双向链表保存缓存中的元素。
如果元素超过容量阈值,则删除最久未使用的元素。为了实现这个功能,将get(), put()方法获取的元素添加到链表首部。
为了在O(1)时间复杂度执行get()方法,再新建一个映射表,缓存key与链表节点。

源码

class LRUCache {private int size;private int capacity;private Map<Integer, Node> cache = new HashMap<>();private Node head;private Node tail;public LRUCache(int capacity) {this.capacity = capacity;this.size = 0;this.head = new Node();this.tail = new Node();this.head.next = this.tail;this.tail.prev = this.head;}public int get(int key) {Node node = cache.get(key);if (node == null) {return -1;}moveToHead(node);return node.value;}public void put(int key, int value) {Node node = cache.get(key);if (node == null) {node = new Node(key, value);cache.put(key, node);addToHead(node);size++;if (size > capacity) {Node tail = removeTail();cache.remove(tail.key);size--;}}node.value = value;moveToHead(node);}private void addToHead(Node node) {node.prev = head;node.next = head.next;head.next.prev = node;head.next = node;}private void removeNode(Node node) {node.prev.next = node.next;node.next.prev = node.prev;}private void moveToHead(Node node) {removeNode(node);addToHead(node);}private Node removeTail() {Node res = tail.prev;removeNode(res);return res;}class Node {int key;int value;Node prev;Node next;public Node(int key, int value) {this.key = key;this.value = value;}public Node() {}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com