Exemple #1
0
        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);
        }
Exemple #2
0
        private void RefreshNode(LinkedHashListNode node)
        {
            if (node == _last)
            {
                return;
            }

            RemoveNode(node);
            AddNode(node);
        }
Exemple #3
0
        private void AddNode(LinkedHashListNode node)
        {
            if (_last != null)
            {
                _last.next = node;
                node.pre   = node;
                node.next  = null;
            }

            _last = node;

            if (_head == null)
            {
                _head = node;
            }
        }
Exemple #4
0
        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);
            }
        }