1. 程式人生 > >Vector和ArrayList、LinkedList的區別

Vector和ArrayList、LinkedList的區別

List介面一共有三個實現類,分別是ArrayList、Vector和LinkedList。List用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。

區別

(1).ArrayList是最常用的List實現類,內部通過陣列實現的,它允許對元素進行隨機訪問。陣列的缺點是每個元素之間不能有間隔,當陣列大小不滿足時需要增加儲存能力。當從ArrayList的中間位置插入或者刪除元素時,需要對陣列進行復制、移動、代價比較高。因此,它適合隨機查詢和遍歷,不適合插入和刪除。

(2).Vector與ArrayList一樣,也是通過陣列實現的,不同的是它支援執行緒的同步,即某一時刻只有一個執行緒能夠寫Vector,但實現同步需要很高的花費,因此,訪問它比訪問ArrayList慢。

(3).LinkedList是採用連結串列結構儲存資料的,很適合資料的動態插入和刪除,但隨機訪問和遍歷速度比較慢。另外,他還提供了List介面中沒有定義的方法,專門用於操作表頭和表尾元素,可以當作堆疊、佇列和雙向佇列使用

(1).ArrayList在記憶體不夠時預設是擴充套件50% + 1個,Vector是預設擴充套件1倍。
(2).Vector提供indexOf(obj, start)介面,ArrayList沒有
(3).Vector屬於執行緒安全級別的,但是大多數情況下不使用Vector,因為執行緒安全需要更大的系統開銷
(4).如果查詢一個指定位置的資料,vector和arraylist使用的時間是相同的,都是O(1),這個時候使用vector和arraylist都可以。而如果移動一個指定位置的資料花費的時間為O(n-i),n為總長度,這個時候就應該考慮到使用Linkedlist,因為它移動一個指定位置的資料所花費的時間為O(1),而查詢一個指定位置的資料時花費的時間為O(i)
(5).Vector由於使用了synchronized方法(執行緒安全)所以效能上比ArrayList要差.
LinkedList使用雙向連結串列

實現儲存,按序號索引資料需要進行向前或向後遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入數度較快

總的來說:
LinkedList:增刪改快
Vector:執行緒安全
ArrayList:查詢快(有索引的存在)

部分轉自:https://blog.csdn.net/qq_28260521/article/details/78707400
Vector和ArrayList的區別:http://www.cnblogs.com/wanlipeng/archive/2010/10/21/1857791.html