1、跳跃表SkipList介绍
跳跃表性质:
- 由很多层链表组成
- 每一层都是一个有序的链表
- 最底层(level 1)的链表包含所有元素
- 如果一个元素出现在level i层的链表中,则它在level i之下的链表也都会出现
- 每个节点都包含两个指针,一个指向同一链表中的下一个元素,一个指向下面一层的元素
跳跃表的增加、删除、查询操作时间复杂度和红黑树一样,也是O(logn)。
相比于红黑树,它的优势是:
- 实现起来更加简单
- 跳跃表的增加、删除操作只会改动局部,不像红黑树的增加、删除操作,因为需要节点重新着色和旋
转,可能整棵树都要进行调整,因此在并发环境下,跳跃表加锁的粒度会更小一些,并发能力更强 - 因为跳跃表的每一层都是一个有序的链表,因此范围查找非常方便,优于红黑树的范围搜索的
跳跃表相比于红黑树,是用空间换时间(level 2层开始每一层都有会存储重复的数据),因此占用的内存空间比红黑树大。
应用:
- redis的底层的有序集合sorted sets也使用 SkipList!
面试聊跳跃表的3个切入点: