ArrayList和vector的區別

2021-10-08 04:21:33 字數 1274 閱讀 1324

這兩類都實現list介面,而list介面一共有三個實現類,分別是arraylist、vector和linkedlist。list用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下:

1.arraylist是最常用的list實現類,內部是通過陣列實現的,它允許對元素進行快速隨機訪問。陣列的缺點是每個元素之間不能有間隔,當陣列大小不滿足時需要增加儲存能力,就要講已經有陣列的資料複製到新的儲存空間中。當從arraylist的中間位置插入或者刪除元素時,需要對陣列進行複製、移動、代價比較高。因此,它適合隨機查詢和遍歷,不適合插入和刪除。

2.vector與arraylist一樣,也是通過陣列實現的,不同的是它支援執行緒的同步,即某一時刻只有乙個執行緒能夠寫vector,避免多執行緒同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問arraylist慢。

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

4.vector是執行緒(thread)同步(synchronized)的,所以它也是執行緒安全的,而arraylist是執行緒非同步(asynchronized)的,是不安全的。如果不考慮到執行緒的安全因素,一般用arraylist效率比較高。

5.如果集合中的元素的數目大於目前集合陣列的長度時,vector增長率為目前陣列長度的100%,而arraylist增長率為目前陣列長度

的50%.如過在集合中使用資料量比較大的資料,用vector有一定的優勢。

6.如果查詢乙個指定位置的資料,vector和arraylist使用的時間是相同的,都是0(1),這個時候使用vector和arraylist都可以。而

如果移動乙個指定位置的資料花費的時間為0(n-i)n為總長度,這個時候就應該考慮到使用linkedlist,因為它移動乙個指定位置的資料

所花費的時間為0(1),而查詢乙個指定位置的資料時花費的時間為0(i)。

7.arraylist 和vector是採用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,都允許直接序號索引元素,但是插入資料要設計到陣列元素移動 等記憶體操作,所以索引資料快插入資料慢,vector由於使用了synchronized方法(執行緒安全)所以效能上比arraylist要差,linkedlist使用雙向鍊錶實現儲存,按序號索引資料需要進行向前或向後遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入數度較快!

籠統來說:linkedlist:增刪改快

arraylist:查詢快(有索引的存在)

Array List和ArrayList的區別與

定義 public abstract class array icloneable,ilist,icollection,ienumerable,istructuralcomparable,istructuraequatable 陣列在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元...

過載技巧 簡單實現string和Vector

1.賦值 下標 呼叫 和成員訪問箭頭 等操作符必須定義為成員,將這些操作符定義為非成員函式將在編譯時標記為錯誤。2.像賦值一樣,復合賦值操作符通常應定義為類的成員。與賦值不同的是,不一定非得這樣做,如果定義為非成員復合賦值操作符,不會出現編譯錯誤。3.改變物件狀態或與給定型別緊密聯絡的其他一些操作符...

LinkedList和ArrayList的區別

對於集合collection下的list介面,有兩個實現類,arraylist和linkedlist,那麼他們兩個有什麼區別呢。arraylist的底層由陣列實現,而linkedlist的底層由雙向鍊錶實現,底層的不同才是他們區別的根源。然而因為他們繼承於同乙個父介面,他們的很多方法都是相同的。關於...