URL缓存机制

2023-10-31

在这里插入图片描述

class LRUCache {

    class Node {
        int key;
        int value;
        Node pre;
        Node post;

        public Node() {}
        public Node(int key, int value) {
            this.key = key;
            this.value = value;
        }

    }

    private Map<Integer, Node> map;
    private int size;//节点的个数
    private int capacity;//缓存的容量
    private Node head;//头节点
    private Node tail;//未节点

    public LRUCache(int capacity) {
        map = new HashMap<>();
        size = 0;
        this.capacity = capacity;
        head = new Node();
        tail = new Node();

        head.post = tail;
        tail.pre = head;
    }
    
    public int get(int key) {
        Node cur = map.get(key);
        //当前节点不存在返回-1
        if(cur == null) {
            return -1;
        }else {
            //存在就移到队列头部
            moveToHead(cur);
            return cur.value;

        }


    }
    
    public void put(int key, int value) {
        //获取该节点
        Node cur = map.get(key);
        //存在
        if(cur != null) {
            //覆盖
            cur.value = value;
            //移到对头
            moveToHead(cur);
        }else {
            //不存在就创建一个
            Node newNode  = new Node(key, value);
            //加进map
            map.put(key, newNode);
            //加到对头
            addToHead(newNode);
            //数量加一
            size++;

            if(size > capacity) {
                //超过容量删除队尾元素 删除map的值
                Node tail = removeTail();
                map.remove(tail.key);
                size--;
            }
        }
    }

    public void moveToHead(Node node) {
        removeNode(node);
        addToHead(node);
    }

    public void removeNode(Node node) {
        node.pre.post = node.post;
        node.post.pre = node.pre;
    }

    public void addToHead(Node node) {
        node.pre = head;
        node.post = head.post;
        head.post = node;
        node.post.pre = node;
    }

    public Node removeTail() {
        Node res = tail.pre;
        removeNode(res);
        return res;
    }
}

/**
 * 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);
 */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

URL缓存机制 的相关文章

  • 力扣:验证回文串--使用正则匹配

    给定一个字符串 验证它是否是回文串 只考虑字母和数字字符 可以忽略字母的大小写 public class PalindromeRegular public boolean isPalindrome String s 去掉非字母数字的字符 S
  • 力扣:删除链表中的节点

    237 删除链表中的节点 请编写一个函数 用于 删除单链表中某个特定节点 在设计函数时需要注意 你无法访问链表的头节点 head 只能直接访问 要被删除的节点 题目数据保证需要删除的节点 不是末尾节点 示例 1 输入 head 4 5 1
  • 删除排序数组中的重复项

    文章目录 删除排序数组中的重复项 一 暴力 时间复杂度O n 2 空间复杂度 O 1 二 优化 时间复杂度O n 空间复杂度O 1 删除排序数组中的重复项 给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素 使每个元素 只
  • 剑指 Offer 10- I. 斐波那契数列(java+python)

    写一个函数 输入 n 求斐波那契 Fibonacci 数列的第 n 项 即 F N 斐波那契数列的定义如下 F 0 0 F 1 1 F N F N 1 F N 2 其中 N gt 1 斐波那契数列由 0 和 1 开始 之后的斐波那契数就是由
  • URL缓存机制

    class LRUCache class Node int key int value Node pre Node post public Node public Node int key int value this key key th
  • 力扣:多数元素

    给定一个大小为 n 的数组 找到其中的多数元素 多数元素是指在数组中出现次数 大于 n 2 的元素 你可以假设数组是非空的 并且给定的数组总是存在多数元素 class Solution public int majorityElement
  • 剑指 Offer 39. 数组中出现次数超过一半的数字(java+python)

    数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 你可以假设数组是非空的 并且给定的数组总是存在多数元素 示例 1 输入 1 2 3 2 2 2 5 4 2 输出 2 限制 1 lt 数组长度 lt 50000 java cla
  • 【代码随想录】数组——二分查找相关题目

    int middle left right left 2 防止溢出 等同于 left right 2 35 搜索插入位置 如果目标值不存在于数组中 返回它将会被按顺序插入的位置 这个要求自己没法实现 自己实现的会溢出 当考虑left不行时
  • 力扣 剑指 Offer 25. 合并两个排序的链表

    简单题 就不多写了 class Solution public ListNode mergeTwoLists ListNode l1 ListNode l2 ListNode head new ListNode t head while l
  • 【LeetCode-中等题】39. 组合总和

    文章目录 题目 方法一 递归 回溯 题目 这题的nums数组里面不存在重复元素 所以也就无需做去重操作 但同一个元素可以被无限次取 说明每次递归中的for循环的开始位置就是自己 nums数组里面存在重复元素 去重版本 方法一 递归 回溯 参
  • 剑指 Offer 58 - II. 左旋转字符串(java+python)

    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部 请定义一个函数实现字符串左旋转操作的功能 比如 输入字符串 abcdefg 和数字2 该函数将返回左旋转两位得到的结果 cdefgab 示例 1 输入 s abcdefg k
  • LeetCode 220. 存在重复元素 III

    题目链接 点击这里 class Solution public boolean containsNearbyAlmostDuplicate int nums int k int t TreeSet
  • 力扣876. 链表的中间结点(java+python)

    给定一个头结点为 head 的非空单链表 返回链表的中间结点 如果有两个中间结点 则返回第二个中间结点 示例 1 输入 1 2 3 4 5 输出 此列表中的结点 3 序列化形式 3 4 5 返回的结点值为 3 测评系统对该结点序列化表述是
  • 力扣 214. 最短回文串 一遍过,很舒服(代码做了分层,很容易理解)

    include
  • 力扣简单题合集(带答案)

    1 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍 class Solution publi
  • LeetCode 1800. 最大升序子数组和

    题目链接 https leetcode cn problems maximum ascending subarray sum 时间复杂度为 O n O n O n 空间复杂度为 O
  • 【总结】用树形图和剪枝操作理解完全背包问题中组合数和排列数问题

    文章目录 TOC 前言 一 完全背包中的排列数和组合数问题 1 1 问题来源 1 2 两个for循环先后顺序分析 1 2 1 先遍历背包后遍历物品得到排列数 1 2 2 先遍历物品后遍历背包得到组合数 小结 前言 建议先看理清0 1背包问题
  • 力扣412 Fizz Buzz(java+python)

    给你一个整数 n 找出从 1 到 n 各个整数的 Fizz Buzz 表示 并用字符串数组 answer 下标从 1 开始 返回结果 其中 answer i FizzBuzz 如果 i 同时是 3 和 5 的倍数 answer i Fizz
  • LeetCode 687. 最长同值路径

    题目链接 https leetcode cn problems longest univalue path C 代码如下 Definition for a binary tree node struct TreeNode int val T
  • 二分查找的总结

    一 二分查找 1 思路分析 这道题目的前提是数组为有序数组 同时题目还强调数组中无重复元素 因为一旦有重复元素 使用二分查找法返回的元素下标可能不是唯一的 这些都是使用二分法的前提条件 当大家看到题目描述满足如上条件的时候 可要想一想是不是

随机推荐

  • python 按文件名批量移动文件至指定文件夹

    做猫狗分类任务 要求数据集划分为训练集 training dataset 和验证集 validation dataset 均包含dogs和cats两个目录 且每个目录下包含与目录名类别相同的RGB图 数据集共25000张照片 其中训练集猫狗
  • k8s之工作负载控制器的应用

    k8s之工作负载控制器的应用 1 k8s工作负载控制器是什么 2 Deployment介绍 2 1 deployment的资源清单文件 2 2 Deployment 滚动升级 2 3 Deployment 水平扩容 2 4 Deployme
  • rsync 时提示 skipping non-regular file。。。。。 的问题

    在执行 rsync 时会提示 skipping non regular file 的内容 原因是原文件夹中包含软链接导致 可以忽略 rsync rvtO delete media u2 downloads media uu2 downloa
  • windows10+vscode+anaconda+python3.7配置LiDAR-MOS动态物体点云开源项目

    之前用c 开发较多 最近开始尝试深度学习方面的工作 用到python合pytorch 经过4天的探索 终于能把测试代码跑起来了 记录下遇到的坑 1安装anaconda 这个不是本文重点 网上教程很多 2创建python虚拟环境 2 1使用v
  • STM32F103 USB虚拟成U盘功能

    STM32F103 USB虚拟成U盘功能 还在学习 中
  • 蓝桥杯省赛模拟题-智能门锁

    本文是对 坊间流传的 蓝桥杯省赛模拟题 智能门锁 的一种解法和思路 用的是蚂蚁科技的底层代码 其中有一个BUG虽然解决 但仍然不清除原因 数码管显示6个数组字符就会出问题 最多4个稳定 但是加入超声波底层就会都正常 不清楚这是什么原因造成的
  • yolo5 训练无人人机识别系统

    环境搭建 安装驱动 点击鼠标右键 如果出现NVIDIA图标 点开 出现如下图片 我的显卡是1650 根据显卡的型号去官网找相应的驱动下载就好了 驱动官网 安装好之后 打开命令行cmd 输入如下指令 nvidia smi 显示出如下数据即为安
  • 电机驱动的三种脉冲模式

    电机驱动的三种脉冲模式 脉冲 方向 脉冲 脉冲 A B正交脉冲
  • TLS certificate verification has been disabled

    git push 推送仓库报错 缺少了安全认证 所以解决方法是重启安全认证 git config global http sslVerify true
  • 电机控制常用PID控制算法

    本文分享自己在电机控制仿真中的建模方法 敬请批评指正 同名B站链接 Timer sir 电机控制常用PID控制算法 PID控制原理 位置式PID 增量式PID 抗饱和PID PID控制仿真 仿真模型 仿真结果 PID控制原理 将偏差的比例
  • 记一次ThreadLocal的使用注意点(线程池)

    Threadlocal的作用就不用多讲了 主要是一个map用于线程间的数据隔离 正常情况下 线程回收 那么这个线程对应的map值也会被回收 是ThreadLocal中被移除并非值本身被移除 如果是对象并且任然被引用 它是不会被回收的 基于上
  • SpringBoot使用Nacos作为配置中心服务和服务注册中心

    简介 从spring开始 所有的配置文件都放在项目中 如果需要修改配置文件内容 则需要登陆服务器重启服务 想象一下如果你有一百台服务的需要修改 那是不可想象的工作量 目前已有的配置中心 携程开源的Apollo 数据保存在mysql中 支持命
  • 【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 文献来源 从甚高分辨率 VHR 航空和卫星
  • 快速实现 WIFI MQTT通信详解

    WIFI MQTT接入ONE NET云平台 一 本例程实现功能介绍 二 云平台操作流程 三 硬件接线图 材料清单 四 完整代码 代码解析 五 代码实验现象 前言 MQTT是一种基于TCP的物联网通信协议 在物联网领域应用非常广泛 基本上所有
  • kafka/bin/kafka-run-class.sh: line 342: exec: java: not found

    本来jps看了下 kafka和zookeeper都起来了 手痒 非要换宝塔的进程守护管理器 选目录为 home kafka 命令为 home kafka bin zookeeper server start sh home kafka co
  • 投票同款特效样式

    先看效果 再看代码 查看更多
  • STM32实现扫频功能

    简介 我们都知道 在信号发生器中 有一个扫频模式 指信号发生器在指定的扫描时间内从起始频率到终止频率变化输出 扫频模式支持线性扫频 对数扫频 和步进扫频三种方式 起始频率和终止频率 起始频率和终止频率是频率扫描的频率上限和下限 信号发生器总
  • DB2时间日期函数_悟sphenic_新浪博客

    DB2时间日期函数 gt DAYNAME 返回一个大小写混合的字符串 对于参数的日部分 用星期表示这一天的名称 例如 Friday DAYOFWEEK 返回参数中的星期几 用范围在 1 7 的整数值表示 其中 1 代表星期日 DAYOFWE
  • react获取当前路由

    使用useHistory import useLocation from react router const location useLocation const routerName gt console log location pa
  • URL缓存机制

    class LRUCache class Node int key int value Node pre Node post public Node public Node int key int value this key key th