关于LRU的具体定义可以查看这个链接:
http://mcicpc.cs.atu.edu/archives/2012/mcpc2012/lru/lru.html
public class LRUCache {
private Dictionary<int, int> _cache;
private List<int> _usedKeys;
private int _capacity;
public LRUCache(int capacity)
{
_cache = new Dictionary<int, int>();
_usedKeys = new List<int>();
_capacity = capacity;
}
public int Get(int key)
{
if(!_cache.ContainsKey(key)){
return -1;
}
else{
_usedKeys.Remove(key);
_usedKeys.Insert(0, key);
return _cache[key];
}
}
public void Set(int key, int value)
{
if(_cache.ContainsKey(key)){
_cache[key] = value;
_usedKeys.Remove(key);
_usedKeys.Insert(0, key);
}
else{
if(_cache.Keys.Count < _capacity){
_cache.Add(key, value);
_usedKeys.Insert(0, key);
}
else
{
var removing = _usedKeys.Last();
_usedKeys.RemoveAt(_usedKeys.Count - 1);
_cache.Remove(removing);
_cache.Add(key, value);
_usedKeys.Insert(0, key);
}
}
}
}原文:http://blog.csdn.net/lan_liang/article/details/49962311