private void MoveToFront(LRUCacheEntry entry) { var node = entry.Node; var key = node.Value.Key; list.Remove(node); entry.Node = list.AddFirst(node.Value); }
public virtual void Put(TKey key, TData value) { if (map.TryGetValue(key, out var entry)) { entry.Node.Value.Data = value; MoveToFront(entry); } else { var node = new LinkedListNode <LRUCacheNode>(new LRUCacheNode(key, value)); entry = new LRUCacheEntry(node); list.AddFirst(node); map.Add(key, entry); EnsureCapacity(); } }