private string RemoveNode(LinkedHashListNode node) { if (node == _head && node == _last) //空表,没有节点可以移除 { _head = null; _last = null; } else if (node == _last) //移除最后一个节点 { _last = _last.pre; _last.next = null; } else if (node == _head) //移除第一个节点 { _head = _head.next; _head.pre = null; } else { node.pre.next = node.next; node.next.pre = node.pre; } return(node.key); }
private void RefreshNode(LinkedHashListNode node) { if (node == _last) { return; } RemoveNode(node); AddNode(node); }
private void AddNode(LinkedHashListNode node) { if (_last != null) { _last.next = node; node.pre = node; node.next = null; } _last = node; if (_head == null) { _head = node; } }
public void Put(string key, string value) { if (!dict.TryGetValue(key, out LinkedHashListNode node)) { if (dict.Count >= _capacity) //判断是否还有空余容量,如果没有就删除第一个节点 { string oldKey = RemoveNode(_head); dict.Remove(oldKey); } node = new LinkedHashListNode(key, value); //加入新节点 AddNode(node); dict.Add(key, node); } else { node.value = value; RefreshNode(node); } }