list 集合中有三個子類,ArrayList 、 linkedList 、Vector 。數組
ArrayList:底層數據結構是數組,查詢快,增刪慢,線程不安全,效率高。安全
Vector :底層數據結構是數組,查詢快,增刪慢,線程安全,效率低。數據結構
LinkedList:底層數據結構是鏈表,查詢慢,增刪快。線程不安全,效率高。併發
ArrayList 內部數據結構是數組實現的,對元素進行快速隨機訪問(O(1)、RandomAccess接口)。dom
(1)數組的缺點是每一個元素之間不能有間隔,默認構造方法初始化出來的容量是10(1.7以後都是延遲初始化,即第一次調用add方法添加元素的時候纔將elementData容量初始化爲10)。線程
(2)ArrayList
容許空值和重複元素,當往 ArrayList 中添加的元素數量大於其底層數組容量時,其會經過擴容機制從新生成一個更大的數組。ArrayList
擴容的長度是原長度的1.5倍,對於大對象,可能有內存浪費。code
(3)ArrayList
是非線程安全類,併發環境下,多個線程同時操做 ArrayList,會引起不可預知的異常或錯誤。對象
(4)當從 ArrayList 的中間位置插入或者刪除元素時,須要對數組進 行復制、移動、代價比較高。blog
所以,它適合隨機查找和遍歷,不適合插入和刪除。 接口
ArrayList 與 LinkedList 區別:
總結:當增刪元素是在中間或者或者前面,而且順序訪問時,採用 LinkedList。增刪在列表後面,且須要快速隨機訪問,採用 ArrayList