1.ArrayList是一个相对来说比较简单的数据结构,最重要的一点就是它的自动扩容,可以认为就是我们常说的“动态数组”。
来看一段简单的代码:
在执行这四条语句时,是这么变化的:

其中,<code>add</code>操作可以理解为直接将数组的内容置位,<code>remove</code>操作可以理解为删除index为0的节点,并将后面元素移到0处。
当我们在ArrayList中增加元素的时候,会使用<code>add</code>函数。他会将元素放到末尾。具体实现如下:
我们可以看到他的实现其实最核心的内容就是<code>ensureCapacityInternal</code>。这个函数其实就是自动扩容机制的核心。我们依次来看一下他的具体实现
也就是说,当增加数据的时候,如果ArrayList的大小已经不满足需求时,那么就将数组变为原长度的1.5倍,之后的操作就是把老的数组拷到新的数组里面。例如,默认的数组大小是10,也就是说当我们<code>add</code>10个元素之后,再进行一次add时,就会发生自动扩容,数组长度由10变为了15具体情况如下所示:
Array的put和get函数就比较简单了,先做index检查,然后执行赋值或访问操作:
注释很清楚:
Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).