最近跟同学吃饭扯淡的时候,由技术扯到薪资,又由薪资扯到他找工作时跟面试官是怎么扯淡拿高工资的,各种技术一顿侃,总之只要啥都了解就没问题了。谈到缓存的时候,我试探性的问了问- -你还记得LRU怎么写吗,他说啥完?我说没事。。

 写完这篇文章发给他- -鄙视完他让他请我再吃饭,标准的缓存LRU实现为哈希表+链表,这是热乎的双向链表,也是C#版本的。。C#实现双向链表 

代码:

    public class LRUCache<T>{private int _size;//链表长度private int _capacity;//缓存容量 private Dictionary<int, ListNode<T>> _dic;//key +缓存数据private ListNode<T> _linkHead;public LRUCache(int capacity){_linkHead = new ListNode<T>(-1, default(T));_linkHead.Next = _linkHead.Prev = _linkHead;this._size = 0;this._capacity = capacity;this._dic = new Dictionary<int, ListNode<T>>();}public T Get(int key){if (_dic.ContainsKey(key)){ListNode<T> n = _dic[key];MoveToHead(n);return n.Value;} else{return default(T);}}public void Set(int key, T value){ListNode<T> n;if (_dic.ContainsKey(key)){n = _dic[key];n.Value = value;MoveToHead(n);}else{n = new ListNode<T>(key, value);AttachToHead(n);_size++;} if (_size > _capacity){RemoveLast();// 如果更新节点后超出容量,删除最后一个_size--;}_dic.Add(key, n);}// 移出链表最后一个节点private void RemoveLast(){ListNode<T> deNode = _linkHead.Prev;RemoveFromList(deNode);_dic.Remove(deNode.Key);}// 将一个孤立节点放到头部private void AttachToHead(ListNode<T> n){n.Prev = _linkHead;n.Next = _linkHead.Next;_linkHead.Next.Prev = n;_linkHead.Next = n;}// 将一个链表中的节点放到头部private void MoveToHead(ListNode<T> n){RemoveFromList(n);AttachToHead(n);}private void RemoveFromList(ListNode<T> n){//将该节点从链表删除n.Prev.Next = n.Next;n.Next.Prev = n.Prev;}}public class ListNode<T>{public ListNode<T> Prev;public ListNode<T> Next;public T Value;public int Key;public ListNode(int key, T val){Value = val;Key = key;this.Prev = null;this.Next = null;}}

测试:

          LRUCache<int> cache = new LRUCache<int>(3);cache.Get(1);cache.Set(1, 1);cache.Set(2, 2);cache.Get(3);cache.Set(3, 3); cache.Set(4, 4);cache.Get(2);

转载于:https://www.cnblogs.com/ylsforever/p/6511000.html

C#简单实现LRU缓存相关推荐

  1. 关于LRU缓存简单记录以及代码补全。

    目录 大概思路 时间空间复杂度分析 指针操作具体细节 代码 双向链表设计 私有成员变量设计: 构造函数和析构函数设计: get与put具体设计 双向指针的具体细节 添加到头节点函数 删除尾节点函数 删 ...

  2. 算法必知 --- LRU缓存淘汰算法

    作者:_code_x 链接:https://www.jianshu.com/p/b7fed77324b9 写在前 就是一种缓存淘汰策略. 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾 ...

  3. LeetCode第 146 号问题: LRU 缓存机制

    题目描述 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果密钥 (ke ...

  4. 【转】简单的java缓存实现

    本文转自 http://my.oschina.net/u/866190/blog/188712 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法,每种算法各有各的优 ...

  5. 实现 LRU 缓存机制

    实现 LRU 缓存机制 文章目录 实现 LRU 缓存机制 一.什么是 LRU 算法 二.LRU 算法描述 三.LRU 算法设计 四.代码实现 一.什么是 LRU 算法 LRU 就是一种缓存淘汰策略.( ...

  6. LRU缓存实现(Java)

    LRU是Least Recently Used 的缩写,翻译过来就是"最近最少使用",LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的 ...

  7. LRU缓存 数据结构设计(C++)

    做LeetCode第146题LRU缓存,觉得收获不小,特此记录. 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构. 实现 LRUCache 类: LRUCache(int ca ...

  8. 06 | 链表(上):如何实现LRU缓存淘汰算法?

    缓存 作用 缓存是一种提高数据读取性能的技术,在硬件设计.软件开发中都有着非常广泛的应用,比如常见的 CPU 缓存.数据库缓存.浏览器缓存等等. 淘汰策略 常见的策略有三种:先进先出策略 FIFO(F ...

  9. 【牛客 - NC93】设计LRU缓存结构(模拟)

    设计LRU缓存结构_牛客题霸_牛客网 描述 设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 k ,并有如下两个功能 1. set(key, value):将记录(key, va ...

最新文章

  1. 网站不允许上传asp cer cdx htr等文件时
  2. Linux输入不同颜色字体
  3. 10分钟搞定 Java 并发队列好吗?好的
  4. mysql 导入创建表空间_说说在 Oracle11g 中如何创建表空间、创建用户并授权以及导入与导出数据...
  5. python 功能键ord_ord()函数以及Python中的示例
  6. c语言设计程序实现顺序冒泡_2019年9月全国计算机等级考试《二级C语言程序设计》题库...
  7. Spring:aspectj-autoproxy 简介
  8. sqoop连接mysql_Sqoop jdbc 连接 MySQL 驱动包com.mysql.cj.jdbc.Driver 问题解决方法
  9. iOS已发布应用中对异常信息捕获和处理(转)
  10. 软件测试结束的标准是什么??
  11. java根据文件字符换行_java操作txt文本(一):遇到指定字符换行
  12. 【持续更新】 2022年 (2023届) 计算机 软件 保研经历 保研经验贴 (菜鸟 211 低rank 无科研成果 复旦/浙大/西安交大/中山/武大/华师大/东南/国科大杭高院)
  13. 物联网信息安全复习笔记(从头开始,两天速成)
  14. 假设检验,p-value,glm
  15. to be solved
  16. 80老翁谈人生(151):老翁老眼昏花,读错了一个数量级
  17. ora-12505错误
  18. 十三届蓝桥青少组省赛Python-20220423
  19. scikit-learn 支持向量机算法库使用小结
  20. html怎么设置下划线形状,科技常识:CSS如何给文字添加下划线样式

热门文章

  1. Ansible 入门案例
  2. 【软考-软件设计师】CPU的功能与组成
  3. zTree树形菜单交互选项卡效果实现
  4. id3与软件测试,ID3算法的实现
  5. oracle常用函数api,Oracle-API OracleAPI、oracle10G函数大全(常用函数)、 联合开发网 - pudn.com...
  6. scala调用java代码_scala调用java代码
  7. Vb 与 Vc 的区别
  8. 还没掌握Linux文件权限与目录配置命令?就这还不点进来看看干货
  9. 关于静态联编和动态联编
  10. qt 背景和控件布局_Qt控件背景图片设置总结