链表,数组的基本实现和特性总结

303 阅读1分钟

array:

当申请数组的时候,计算机会在内存中开辟一块连续的地址,每个地址可以通过内存管理器访问(这也是就array访问元素快的原因)

array 添加的源代码有两点:1.先比较size和length,保证size大于length。2.copy后半部分元素到新的位置(如果进行修改会涉及大量的copy这是array修改慢的原因)

为解决array修改慢的原因出现linked list

linked list:

java中的链表有两个指针,为双向链表,主要就是value,next,previous。

对链表进行修改的时候只需要将指针(next,previous)的指向改变(这就是链表修改快的原因)

但是在进行访问的时候就必须从头/尾依次往中间寻找元素(这就是链表查询慢的原因)

时间复杂度比较:

linked list 时间复杂度,查看O(n),其他都是O(1)

array 时间复杂度,查看,prepend,append O(1),其他都是O(n)

为链表加速:两个思想,1升维,2空间换时间(所有的加速优化中心思想)

跳表:

使用的就是增加维度的思想,应用场景redis

附两个拓展链接

图片