【实质】可以进行二分查找的有序链表,JUC包下有ConcurrentSkipListMap
跳表在原有的有序链表上增加了多级索引,实现了快速查找、插入、删除
可以得出,查找时每层最多遍历3个结点,而总层数为$log2n$,则CRUD复杂度均为$O(logn)$
插入
插入新结点后,增加索引采用随机化的方式。因为很难有一种有效的算法保证均匀,而随机可以保证大体均匀
ConcurrentSkipListMap
中,会生成一个随机32位int
,从后往前数的连续的1的个数即为层数,例如:…011110为4层
.
删除
.
步骤:
- 自上而下,查找第一次出现节点的索引
- 删除该索引下层的所有节点,如果该层只剩下1个节点,删除整个一层(原链表除外)
对比平衡树,跳跃表的优点是维护结构完全依靠随机,成本较低,但这也是缺点所在