使用HashMap实现LRU

server/2024/12/14 18:19:18/

1. 使用LinkedList实现

java">import java.util.LinkedList;public class Main {public static void main(String[] args) throws Exception {cacheLRU cache = new cacheLRU(3);cache.add(1);cache.add(2);cache.add(3);System.out.print(cache.get(1));System.out.print(cache.get(2));System.out.println(cache.get(3));// 123 3->2->1cache.add(4); // 4->3->2System.out.print(cache.get(2));System.out.print(cache.get(3));System.out.print(cache.get(4));// 234 4->3->2}
}class cacheLRU {LinkedList<Integer> linkedList = new LinkedList<>();private int cap;public cacheLRU(int cap) {this.cap = cap;}public boolean add(Integer num) {if (linkedList.size() >= cap) {linkedList.removeLast();}linkedList.addFirst(num);return true;}public int get(Integer num) {if (!linkedList.contains(num)) {return -1;}linkedList.remove(num);add(num);return num;}
}

2. 双向链表+哈希表 力扣146

力扣原题点这

java">class LRUCache {int size;int cap;HashMap<Integer, Node> map;Node head = new Node();Node tail = new Node();class Node {Node pre;Node next;int key;int value;public Node() {}public Node(int key, int value) {this.key = key;this.value = value;this.pre = null;this.next = null;}}public LRUCache(int cap) {this.size = 0;this.cap = cap;this.map = new HashMap<Integer, Node>(cap);this.head.next = tail;this.tail.pre = head;}public void put(int key, int value) {Node node = map.get(key);if (node != null) {node.value = value;moveToHead(node);} else {Node newNode = new Node(key, value);map.put(key, newNode);addToHead(newNode);size++;if (size > cap) {Node tailpre = removeLast();map.remove(tailpre.key);size--;}}}public int get(int key) {Node node = map.get(key);if (node == null) {return -1;}moveToHead(node);return node.value;}private void addToHead(Node node) {node.pre = head;node.next = head.next;head.next.pre = node;head.next = node;}private void removeNode(Node node) {node.pre.next = node.next;node.next.pre = node.pre;}private void moveToHead(Node node) {removeNode(node);addToHead(node);}private Node removeLast() {Node tailpre = tail.pre;removeNode(tailpre);return tailpre;}
}/*** Your LRUCache object will be instantiated and called as such:* LRUCache obj = new LRUCache(capacity);* int param_1 = obj.get(key);* obj.put(key,value);*/

http://www.ppmy.cn/server/150151.html

相关文章

EXCEL 数据透视表基础操作

目录 1 选择数据&#xff0c;插入数据透视表 2 选择数据透视表生成位置 3 出现了数据透视表的面板 4 数据透视表的基本结构认识 4.1 交叉表/列联表 4.2 row, column, cell 一个新增的筛选器&#xff0c;就这么简单 4.3 可以只添加 rowcell/值 &#xff0c;也可以colu…

【源码+文档+调试讲解】校园零售商城微信小程序

摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括校园零售商城微信小程序的网络应用&#xff0c;在外国校园零售商城微信小程序已经是很普遍的方式&#xff0c;不过国内的校园零售商城微信小程序可能还处于起步阶段。校…

网络爬虫全解析

一、网络爬虫基础要点 &#xff08;一&#xff09;爬虫原理 目标确定&#xff1a;明确需要抓取数据的网站或网页范围&#xff0c;例如针对特定电商平台抓取商品信息&#xff0c;或聚焦新闻网站获取新闻报道内容&#xff0c;要考量数据的价值与用途。URL 解析&#xff1a;理解网…

【深度学习入门】深度学习介绍

1.1 深度学习介绍 学习目标 目标 知道深度学习与机器学习的区别了解神经网络的结构组成知道深度学习效果特点 应用 无 区别 特征提取方面 机器学习的特征工程步骤是要靠手动完成的&#xff0c;而且需要大量领域专业知识深度学习通常由多个层组成&#xff0c;它们通常将更简…

QoS分类和标记

https://zhuanlan.zhihu.com/p/160937314 1111111 分类和标记是识别每个数据包优先级的过程。 这是QoS控制的第一步&#xff0c;应在源主机附近完成。 分组通常通过其分组报头来分类。下图指定的规则仔细检查了数据包头 &#xff1a; 下表列出了分类标准&#xff1a; 普通二…

ip地址获取失败啥意思?ip地址获取失败怎么回事

在日常的网络使用中&#xff0c;我们时常依赖于稳定的IP地址来确保数据的顺畅传输和设备的正常识别。然而&#xff0c;有时我们会遇到“IP地址获取失败”的困扰&#xff0c;这不仅阻碍了我们的网络访问&#xff0c;还可能带来一系列的网络连接问题。那么&#xff0c;IP地址获取…

Java多线程与线程池技术详解(九)

面对苦难的态度&#xff1a;《病隙碎笔》“不断的苦难才是不断地需要信心的原因&#xff0c;这是信心的原则&#xff0c;不可稍有更动。” 孤独与心灵的成长&#xff1a;《我与地坛》“孤独的心必是充盈的心&#xff0c;充盈得要流溢出来要冲涌出去&#xff0c;便渴望有人呼应他…

java实现word转pdf

1、使用技术 linux:libreoffice windows:dom4j 2、java代码 import com.documents4j.api.DocumentType; import com.documents4j.api.IConverter; import com.documents4j.job.LocalConverter; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaTyp…