Redis 中的有序集合(Sorted Set)就是用跳表来实现的。

跳表的背景:

即便链表中存储的数据是有序的,如果我们要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率就会很低,时间复杂度会很高,是 O(n)

跳表的思想:

对链表建立“索引”,每两个结点提取一个结点到上一级,我们把抽出来的那一级叫作索引或索引层。
image.png

视情况而定,可以建立多级索引。这样查询的复杂度就降为logn了。

跳表索引动态更新

当我们不停地往跳表中插入数据时,如果我们不更新索引,就有可能出现某 2 个索引结点之间 数据非常多的情况。极端情况下,跳表还会退化成单链表。
image.png
这时候就需要动态更新索引了。跳表是通过随机函数来维护平衡性的。