关于这篇文章存在的意义在于,ArrayList既然存取快,又是一个可变长的数组,那么为什么还要有LinkedList?
ArrayList和LinkedList来自于同一个干爹List,网上的解释大都是ArrayList是一个数组,是一个可变大小的数组,嗯?有一定计算机基础的同学会对他的物理存储和逻辑结构产生疑问,它真的还是一个数组吗?它有没有违反数组的定义——连续性?它在物理存储还是一个连续的空间吗?ArrayList它里面到底有没有List的基因?
对数据结构没有基础的同学听我慢慢道来,有基础的同学可以跳过。
首先,数组的定义是空间连续的,这也是它为什么存储速度快的原因,当你需要取数组的第x个元素的时候,你只需要知道数组的首地址m和每个元素的空间大小y,所以第x个元素所对应的空间地址=m+x*y。
现在你应该知道的是,一旦破坏这种结构,数组将变得毫无意义。
该分析来源于JDK1.7的源代码,已知1.8_101已被封装
未完...待续