我知道redis列表是通过引擎盖下的链表实现的。然而,当计算列表长度的时间复杂度时,它不应该是o(n)吗
zzoitvuj1#
可以在以下位置找到列表类型的声明https://github.com/redis/redis/blob/unstable/src/adlist.h. 如果您查看第50行周围的部分,您会发现:
typedef struct list { listNode *head; listNode *tail; void *(*dup)(void *ptr); void (*free)(void *ptr); int (*match)(void *ptr, void *key); unsigned long len; } list;
注意 unsigned long len 存储列表长度的。这就是为什么 O(1) .
unsigned long len
O(1)
1条答案
按热度按时间zzoitvuj1#
可以在以下位置找到列表类型的声明https://github.com/redis/redis/blob/unstable/src/adlist.h. 如果您查看第50行周围的部分,您会发现:
注意
unsigned long len
存储列表长度的。这就是为什么O(1)
.