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).