当前位置:
首页 > Python基础教程 >
-
C#教程之LRUCache c#
LRUCache是Least Recently Used 近期最少使用算法的缓存,是android提供的一个缓存工具类。可以以两种排序方式来输出缓存,一种是按插入顺序输出,一种是按最近最少方式输出,最近使用的放在队首,使用频率低的,间隔时间最长的放在队尾。
下面是实现
using System; using System.Collections.Generic; namespace LY.Helper { public class LRUCache<T> { private Dictionary<string, T> dict; private LinkedList<T> list; private int size = 0; private bool isSequence = false; public LRUCache(int sz):this(sz,false) { } public LRUCache(int sz, bool isSq) { isSequence = isSq; size = sz < 10 ? 10 : sz; dict = new Dictionary<string, T>(size); list = new LinkedList<T>(); } public int Size { get { return size; } set { size = value < 10 ? 10 : value; } } public void Put(string key, T item) { T node; if(dict.TryGetValue(key, out node)) { list.Remove(node); dict[key] = item; list.AddFirst(item); } else { if(list.Count == size) list.RemoveLast(); dict[key] = item; list.AddFirst(item); } } public T Get(string key) { T node; if(dict.TryGetValue(key, out node)) { list.Remove(node); list.AddFirst(node); return node; } return default(T); } public ICollection<T> Values { get { if (isSequence) { return dict.Values; } else { return list; } } } } }
构造函数中传入缓存大小和输出缓存顺序。
我们在调用Put方法时,当缓存长度超过我们构造函数中传入的大小时,会将队尾的移除。将新传入的对象放在队首。
我们从LRUCache中获取对象时,在Get方法中,会将对象移除,并置于队首。
下面我们来进行测试
private void btnTest_Click(object sender, EventArgs e) { LRUCache<int> lruCache = new LRUCache<int>(10); lruCache.Put("1", 1); lruCache.Put("2", 2); lruCache.Put("3", 3); lruCache.Put("4", 4); lruCache.Put("5", 5); lruCache.Get("2"); lruCache.Get("3"); Console.WriteLine("最近最少方式Test..."); foreach (var item in lruCache.Values) { Console.WriteLine(item.ToString()); } LRUCache<int> lruCache1 = new LRUCache<int>(10, true); lruCache1.Put("1", 1); lruCache1.Put("2", 2); lruCache1.Put("3", 3); lruCache1.Put("4", 4); lruCache1.Put("5", 5); lruCache1.Get("2"); lruCache1.Get("3"); Console.WriteLine("顺序方式Test..."); foreach (var item in lruCache1.Values) { Console.WriteLine(item.ToString()); } }
我们来看下输出结果
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式