简介
Golang 第三方库golang-lru基于双向链表实现了三种LRU及变种Cache:LRU,Q2,ARC。今天看了一下代码,简单优雅,整理一下笔记。
双向链表
双向链表在golang标准库container/list中实现。定义了两个核心结构体Element和List。
Element
双向链表的一个节点信息。
type Element struct {
next, prev *Element // 前向指针和后向指针
list *List // 所属List
Value interface{} // 节点值
}
// Next returns the next list element or nil.
func (e *Element) Next() *Element {
if p := e.next; e.list != nil && p != &e.list.root {
return p
}
return nil
}
// Prev returns the previous list element or nil.
func (e *Element) Prev() *Element {
if p := e.prev; e.list != nil && p != &e.list.root {
return p
}
return nil
}