欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > c# >内容正文

c#

c#简单实现lru缓存 -凯发ag旗舰厅登录网址下载

发布时间:2024/10/12 c# 26 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 c#简单实现lru缓存 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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

代码:

public class lrucache{private int _size;//链表长度private int _capacity;//缓存容量 private dictionary<int, listnode> _dic;//key 缓存数据private listnode _linkhead;public lrucache(int capacity){_linkhead = new listnode(-1, default(t));_linkhead.next = _linkhead.prev = _linkhead;this._size = 0;this._capacity = capacity;this._dic = new dictionary<int, listnode>();}public t get(int key){if (_dic.containskey(key)){listnode n = _dic[key];movetohead(n);return n.value;} else{return default(t);}}public void set(int key, t value){listnode n;if (_dic.containskey(key)){n = _dic[key];n.value = value;movetohead(n);}else{n = new listnode(key, value);attachtohead(n);_size ;} if (_size > _capacity){removelast();// 如果更新节点后超出容量,删除最后一个_size--;}_dic.add(key, n);}// 移出链表最后一个节点private void removelast(){listnode denode = _linkhead.prev;removefromlist(denode);_dic.remove(denode.key);}// 将一个孤立节点放到头部private void attachtohead(listnode n){n.prev = _linkhead;n.next = _linkhead.next;_linkhead.next.prev = n;_linkhead.next = n;}// 将一个链表中的节点放到头部private void movetohead(listnode n){removefromlist(n);attachtohead(n);}private void removefromlist(listnode n){//将该节点从链表删除n.prev.next = n.next;n.next.prev = n.prev;}}public class listnode{public listnode prev;public listnode 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

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的c#简单实现lru缓存的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图