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
附两个拓展链接