1. 程式人生 > >ArrayList 和 LinkedList的底層資料結構

ArrayList 和 LinkedList的底層資料結構

LinkedList的實現較為簡單: 底層使用雙向連結串列實現、保留了頭尾兩個指標 、LinkedList的其他操作基本都是基於上面那六個函式實現的,另外LinkedList也有 failFast 機制,這個機制主要在迭代器中使用。

陣列和連結串列各自的特性

陣列和連結串列的特性差異,本質是:連續空間儲存和非連續空間儲存的差異。主要有下面兩點:     

  1. ArrayList:底層是Object陣列實現的:由於陣列的地址是連續的,陣列支援O(1)隨機訪問;陣列在初始化時需要指定容量;陣列不支援動態擴容,像ArrayList、Vector和Stack使用的時候看似不用考慮容量問題(因為可以一直往裡面存放資料);但是它們的底層實際做了擴容;陣列擴容代價比較大,需要開闢一個新陣列將資料拷貝進去,陣列擴容效率低;適合讀資料較多的場合。
  2. LinkedList:底層使用一個Node資料結構,有前後兩個指標,雙向連結串列實現的。相對陣列,連結串列插入效率較高,只需要更改前後兩個指標即可;另外連結串列不存在擴容問題,因為連結串列不要求儲存空間連續,每次插入資料都只是改變last指標;另外,連結串列所需要的記憶體比陣列要多,因為他要維護前後兩個指標;它適合刪除,插入較多的場景LinkedList還實現了Deque介面。