arraylist和linkedlist区别的终点站
Q:为什么arraylist查询较快,而linkedlist删除,新增较快
如图所示黑色为不可用空间,绿色为可用空间。
arraylist在内存空间中为一个连续的空间,而linked是不连续的空间。
查询时
以int类型举例,int所占字节为4。
当arraylist要查询arraylist[4]时会首先找到arraylist[0]的首地址(也就是图中的800位置),那么arraylist[4]的位置就是800+44=816,这样就可以快速定位到arraylist[4]位置并取值。
如果是linkedlist由于存储并不是连续的,所以并不可以用arraylist[i]=arraylist[0]+i4的公式,只能从第一位按照指针一个一个去查找。
综上所述在查询时arraylist的时间复杂度为O(1),而linkedlist的时间复杂度为O(n)
删除和新增时
arraylist新增不需要扩容时,还是因为arraylist储存是连续的,当我需要在中间插入一个元素时,我需要这个元素以后的所有元素均向后平移一位。如果恰巧超过arraylist长度时,需要舍掉这一整块空间,重新寻