ArrayList、LinkedList、Vector的區別

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 區別:

  1. 對二者而言,列表末尾增長一個元素的開銷都是固定的,ArrayList 而言,增長內部數組中一個元素,可能會致使數組從新分配;LinkedList 而言,這個開銷是統一的,都是分配一個內部 Entry 對象。
  2. ArrayList 中間位置插入或刪除元素時,須要對數組進行復制、移動、開銷較大。LinkedList 而言,中間 增刪一個元素的開銷都是固定的。
  3. LinkedList 不支持高效的隨機元素訪問。
  4. ArrayList 的空間浪費在於擴容後list列表中有必定的空間;LinkedList 的空間浪費在於每個元素都須要花費至關的空間,LinkedList 中有內部類。

 

總結:當增刪元素是在中間或者或者前面,而且順序訪問時,採用 LinkedList。增刪在列表後面,且須要快速隨機訪問,採用 ArrayList

相關文章
相關標籤/搜索