0%

跳跃表

【实质】可以进行二分查找的有序链表,JUC包下有ConcurrentSkipListMap

跳表在原有的有序链表上增加了多级索引,实现了快速查找、插入、删除

image-20220218085311411

可以得出,查找时每层最多遍历3个结点,而总层数为$log2n$,则CRUD复杂度均为$O(logn)$

插入

插入新结点后,增加索引采用随机化的方式。因为很难有一种有效的算法保证均匀,而随机可以保证大体均匀

ConcurrentSkipListMap中,会生成一个随机32位int,从后往前数的连续的1的个数即为层数,例如:…011110为4层

.image-20220218100138206

删除

.image-20220218100742036

步骤:

  1. 自上而下,查找第一次出现节点的索引
  2. 删除该索引下层的所有节点,如果该层只剩下1个节点,删除整个一层(原链表除外)

对比平衡树,跳跃表的优点是维护结构完全依靠随机,成本较低,但这也是缺点所在

参考:https://mp.weixin.qq.com/s/COBdoHWDhlw4rmG_fGFhSA