今天发现了一个新的Java数据类型:ConcurrentSkipListMap,其中内部使用了跳表的数据结构。
在看ConcurrentSkipListMap之前先看,什么是跳表?
跳表
跳表是基于有序的单向链表,下面是一个有序的单向链表,每个结点有一个指针都指向下一个结点。
1.有序的单向链表:
如果我们需要检索“值6”的结点,需要从头往尾遍历检索,顺序是:
1 -> 2 -> 3 -> 4 -> 5 -> 6
所用到的复杂度为O(n)
2.跳表
如果一个有序的数组,就可以用二分法加快检索,既然链表也是有序的,那么有没有办法用上二分法呢?答案是可以的。
上述的链表的基础上,提取出“值1”、“值4”、“值7”出来作为中间索引结点。
每个结点有两个指针,一个指向下一个结点,一个指向下一层的结点。
同上面一样检索“值6”,借用二分法的原理:先在最上面的leve2一层中比较&