链表
Redis中的链表在不同情况下底层实现的数据结构是不同的,当列表的元素比较多或者列表中的元素都是比较长的字符串时,Redis就会用链表作为列表的底层实现。
链表 & 链表节点
- 链表节点
数据结构:
// 链表节点
class listNode{
//前置节点
listNode pre;
//后置节点
listNode next;
//节点值
Object value;
}
图示:
- 链表
数据结构
// 链表节点
class list{
//头节点
listNode head;
//尾节点
listNode tail;
//节点数量
long len;
//节点值复制函数
void dup(listNode ptr);
//节点值释放函数
void free(listNode ptr);
//节点值对比函数
........
}
图示:
总结
Redis中链表的特性
- 双端链表: 链表节点带有pre和next指针
- 无环链表: 头节点的pre指针和尾节点的next指针都为NULL
- 带有表头表尾指针:获取表头表尾节点的复杂度为O(1)
- 带链表长度计数器:获取链表中节点数量的复杂度为O(1)
- 多态:链表可以保存不同的类型和值