【HBZ分享】java之跳表skip list的原理

跳表skip list特点

  1. 跳表是个右多个层次的链表组成
  2. 跳表是具有顺序的,每一层都有序
  3. 跳表每一层的元素数量都比下一层少一半,即下一层是上一层元素个数的2倍
  4. 搜索时,从第一层开始逐个比较,当比较的元素比当前元素大时候,就继续比较当前层下一个元素,直到找到比较的元素比当前元素小的为止,然后回到上一个元素,通过上一个元素的指针直接跳到下一层该元素的位置开始查找,如此往复,直到找出相等的元素,描述比较抽象,请看下面的解析图 和 纯净图。

解析图:

【HBZ分享】java之跳表skip list的原理_第1张图片
纯净图:

【HBZ分享】java之跳表skip list的原理_第2张图片

跳表的优缺点

  1. 优点:搜索的时间复杂度可以达到O(LogN)., 比传统的二分搜索树要快得多
  2. 缺点:
    (1). 需要额外的存储空间来存储每一层的指针,而且他的插入和删除操作比较复杂,需要更新多个指针
    (2). 比起单链表,跳表需要存储多级索引,要消耗更多的空间,是空间换时间的思想

跳表应用场景

  1. Redis的Sorted Set使用跳表来实现
    注意:Redis每种数据结构操作,实际上都是基于多种底层数据结构实现的,并不单单是跳表,跳表只是其中的一种而已。

你可能感兴趣的:(java)