ConcurrentSkipListMap以及跳表的原理

怎么才能提高查找效率呢?

为了提高查找效率,使用二分查找的思想,对有序链表建立一级“索引”。 每两个节点提取一个节点到索引层。 索引层中的每个节点 都包

含两个指针,一个指向下一个节点,一个down指针,指向下一级节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3ngZkja-1640785263461)(JUC并发编程.assets/image-20211229212725503.png)]

首先在一级索引层遍历,当遍历到14这个节点的时候,发现其下一个节点是23,则要查找的18就在14和23之间。 然后,通过14节点的

down 指针,下降到原始链表这一层,继续在原始链表中遍历。 此时,只需要在原始链表中,遍历两个节点,14和18,就找到18这个节点

了。 查找18这个节点,在原始链表需要遍历10个节点,现在只需要遍历7个节点(一级索引层遍历5个节点,原始链表遍历2个节点)。

如果再增加一级索引,那么效率会不会更高呢?

建立二级索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9h5nXN3c-1640785263462)(JUC并发编程.assets/image-20211229212926138.png)]

现在如果要查找18节点,只需要遍历6个节点(二级索引层遍历3个节点,一级索引层1个节点,原始链表2个节点)。

通过建立索引的方式,对于数据量越大的有序链表,通过建立多级索引,查找效率提升会非常明显。

这种链表加多级索引的结构 就是 跳表

2、跳表中查询一个节点

通过Key去查询,从Head节点开始进入,由最高层索引开始查询,主键向下层索引缩小范围,知道找到我们BaseHeader这一层后会将Node节点进行逐个equals比较

3、跳表中插入一个节点

跳表作为一个动态数据结构,不仅支持查找操作,还支持数据的插入和删除操作,并且 插入和删除的操作的时间复杂度都是O(logn).

我们先去查询我们这个节点在我们的调表中是否存在,也就是通过key执行上述的查询的过程,如果发现节点存在,那么就会覆盖我们的已存在的节点,如果不存在则新建一个Node节点进行插入操作,但是我们插入之后就会出现一个新的问题,就是我们的节点变了那么对应的索引也应该做相应的修改,那么为新插入的Node节点创建的索引步骤如下 :

1、首先是生成一个随机数

int rnd = ThreadLocalRandom.nextSecondarySeed();

2、然后通过让我们的随机数与0x80000001进行一个&操作,去判断是否满足建立索引的条件

if ((rnd & 0x80000001) == 0) // 0x80000001这个16进制转换为2进制则是 10000000 00000000 00000000 00000001

// rnd这个随机数,最高位和最低为同时为0的时候条件成立,概率是1/4

3、当满足建立索引的条件后,我们还需要通过对这个随机数进行计算得出我们建立的索引层数level

//首先rnd满足索引建立条件初始为1,之后检查从第二位到第31位间1的个数,相加即为索引层数

rnd = 00000000 00000000 00000000 00011110 ===> 得出level为4 + 1 = 5 ;

rnd = 00000000 00000000 00010100 01011110 ===> 得出level为8 + 1 = 9 ;

Docker步步实践

目录文档:

①Docker简介

②基本概念

③安装Docker

④使用镜像:

⑤操作容器:

⑥访问仓库:

⑦数据管理:

⑧使用网络:

⑨高级网络配置:

⑩安全:

⑪底层实现:

⑫其他项目:

⑩安全:

[外链图片转存中…(img-z5IskpPo-1719252026295)]

⑪底层实现:

[外链图片转存中…(img-c25xQ8j9-1719252026295)]

⑫其他项目:

[外链图片转存中…(img-rGL4yxFT-1719252026296)]

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值