public class RaptorHash<T> { private LinkedList<int> Keys; private Hashtable Values; private int Max; public RaptorHash(int max) { Max = max; Keys = new LinkedList<int>(); Values = new Hashtable(); } public void Add(int key, T o) { if (Keys.Contains(key)) Keys.Remove(key); Keys.AddFirst(key); Values.Add(key, o); if (Keys.Count > Max) { Values.Remove(Keys.Last); Keys.Remove(Keys.Last); } } public T Get(int key) { if (Keys.Contains(key)) { Keys.Remove(key); Keys.AddFirst(key); return (T)Values[key]; } return default(T); } public T GetFirst() { return (T)Values[Keys.First.Value]; } }