数组、链表、跳表的基本实现和特性

一、数组
1.底层实现
由内存管理器去内存中申请一段连续的地址,可以通过内存管理器去直接访问开辟的地址;
2.基本特性
a.可以随机地进行访问;
b.删除添加操作比较麻烦,需要O(n)的时间复杂度;
3.ArrayList源代码(不适合大量的插入、删除操作)
a.指定位置的插入:完成一些前期查询工作后,需要将后部数组中的数据进行移动;
System.arraycopy(source,sourcePos,destination,destinationPos,length):第一个参数时原数组,第二个参数时要复制的原数组的起始位置,第三个参数是目标数组,第四个参数是要复制到目标数组的起始位置,第五个参数是要复制的元素的长度;
二、链表(LRU缓存的实现)
1.适用于大量插入、删除操作;
2.单链表、双向链表(有前指针和后指针)、循环链表(尾指针指向头结点);
3.链表的删除、插入和增加操作时间复杂度为O(1),但是访问复杂度为O(n);
三、跳表(链表的优化数据结构)—>redis中的实现
1.在redis中大量使用,以理解工作原理为主;
2.加速链表的查看操作(升维,用空间换时间);
添加索引;增加logn个索引;
如何提高链表查找效率

3.跳表的时间复杂度分析
第K级索引节点的个数是n/(2k),假设索引有h级,最高级的索引有2个结点。n/(2h) = 2,求得 h = log2(n)-1,由于查询的次数等于索引的级数,所以它的时间复杂度为log2(n);
4.跳表空间复杂度分析
n/2+n/4+…—>空间复杂度为O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值