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 = ;
private bool isSequence = false; public LRUCache(int sz):this(sz,false)
{ } public LRUCache(int sz, bool isSq)
{
isSequence = isSq;
size = sz < ? : sz;
dict = new Dictionary<string, T>(size);
list = new LinkedList<T>();
} public int Size
{
get { return size; }
set { size = value < ? : 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>();
lruCache.Put("", );
lruCache.Put("", );
lruCache.Put("", );
lruCache.Put("", );
lruCache.Put("", );
lruCache.Get("");
lruCache.Get(""); Console.WriteLine("最近最少方式Test...");
foreach (var item in lruCache.Values)
{
Console.WriteLine(item.ToString());
} LRUCache<int> lruCache1 = new LRUCache<int>(, true);
lruCache1.Put("", );
lruCache1.Put("", );
lruCache1.Put("", );
lruCache1.Put("", );
lruCache1.Put("", ); lruCache1.Get("");
lruCache1.Get(""); Console.WriteLine("顺序方式Test...");
foreach (var item in lruCache1.Values)
{
Console.WriteLine(item.ToString());
}
}

我们来看下输出结果

 

LRUCache c#的更多相关文章

  1. LruCache算法原理及实现

    LruCache算法原理及实现 LruCache算法原理 LRU为Least Recently Used的缩写,意思也就是近期最少使用算法.LruCache将LinkedHashMap的顺序设置为LR ...

  2. Android开发学习之路-LruCache使用和源码分析

    LruCache的Lru指的是LeastRecentlyUsed,也就是近期最少使用算法.也就是说,当我们进行缓存的时候,如果缓存满了,会先淘汰使用的最少的缓存对象. 为什么要用LruCache?其实 ...

  3. LruCache缓存

    LruCache通常用于实现内存缓存,采用的缓存算法是LRU(Least Recently Used)即近期最少使用算法,其核心思想是:当缓存满的时候,会优先淘汰那些近期最少使用的缓存对象. 1.Lr ...

  4. LruCache为GridView异步加载大量网络图片

    MainActivity如下: import android.os.Bundle; import android.widget.GridView; import android.app.Activit ...

  5. Android内存优化之 LruCache与DiskLruCache

    在日常的Adroid开发中我们经常遇到需要处理大量图片的地方,但Android手机的内存有限该怎么避免手机 内存溢出导致app程序oom,google提供了两种解决方式 LruCache LruCac ...

  6. LruCache详解之 Android 内存优化

    概念: LruCache 什么是LruCache? LruCache实现原理是什么? 这两个问题其实可以作为一个问题来回答,知道了什么是 LruCache,就只然而然的知道 LruCache 的实现原 ...

  7. 利用LruCache为GridView异步加载大量网络图片完整示例

    MainActivity如下: package cc.testlrucache; import android.os.Bundle; import android.widget.GridView; i ...

  8. 利用LruCache为GridView加载大量本地图片完整示例

    MainActivity如下: package cc.testlrucache; import android.os.Bundle; import android.widget.GridView; i ...

  9. Android 使用 LruCache 缓存图片

    在你应用程序的 UI 界面加载一张图片是一件很简单的事情,但是当你需要在界面上加载一大堆图片的时候,情况就变得复杂起来.在很多情况下,(比如使用 ListView, GridView 或者 ViewP ...

  10. Android LruCache(Picasso内存缓存)

    Cache保存一个强引用来限制内容数量,每当Item被访问的时候,此Item就会移动到队列的头部,当cache已满的时候加入新的item时,在队列尾部的item会被回收. 如果你cache的某个值需要 ...

随机推荐

  1. poj-3253-Fence Repair(哈夫曼)

    /* Fence Repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19914 Accepted: 6314 Desc ...

  2. Introduction to Spring Data MongoDB

    Introduction to Spring Data MongoDB I just announced the new Spring 5 modules in REST With Spring: & ...

  3. python manage.py runserver 0.0.0.0:8000

    python manage.py runserver 这种命令行,可以在服务器端输入IP:8000直接访问 在 python manage.py runserver 127.0.01:8000 在服务 ...

  4. Selenium Webdriver——Xpath轴定位(preceding)

     1.preceding-sibling 选取当前节点之前的所有同级节点 text=出发之前的同级节点: 2.preceding 选取当前节点开始标签之前的所有节点 text=出发节点标签之前的所有i ...

  5. window.location 属性

    属性 含义 值 protocol: 协议 "http:" hostname: 服务器的名字 "b.a.com" port: 端口 "88" ...

  6. tomcat加固

    tomcat安全加固和规范 tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐.不过,在默认配置下其存在一定的安全隐患, ...

  7. YARN 多租户资源池配置

    简介: YARN 多租户资源池配置 当多用户同在一个 hadoop 集群作业时,就需要对资源进行有效的限制,例如区分测试.正式资源等 一.查看默认资源池 # 访问:http://192.168.1.2 ...

  8. Flume学习总结

    Flume学习总结 flume是一个用来采集数据的软件,它可以从数据源采集数据到一个集中存放的地方. 最常用flume的数据采集场景是对日志的采集,不过,lume也可以用来采集其他的各种各样的数据,因 ...

  9. 寄存器CPU存储地址信息和数据信息的地方 CPU通过地址寄存器区分指令和数据

  10. jQuery的选择器的总结

    一.简单选择器 // $(function () { // $("#box").css("color","red") // }) // 这个 ...