Java中Vector和ArrayList的區別

2021-08-28 22:20:25 字數 1285 閱讀 1977

首先看這兩類都實現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)。

arraylist 和vector是採用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,

都允許直接序號索引元素,但是插入資料要設計到陣列元素移動 等記憶體操作,所以索引資料快插入資料慢,

vector由於使用了synchronized方法(執行緒安全)所以效能上比arraylist要差

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

7、籠統來說:linkedlist:增刪改快

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

Java中Vector和ArrayList的區別

首先看這兩類都實現list介面,而list介面一共有三個實現類,分別是arraylist vector和linkedlist。list用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下 arraylist是最常用的list實現類,內部是通過陣列實現的,它允許對元素...

Java中Vector和ArrayList的區別

首先看這兩類都實現list介面,而list介面一共有三個實現類,分別是arraylist vector和linkedlist。list用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下 arraylist是最常用的list實現類,內部是通過陣列實現的,它允許對元素...

Java中Vector和ArrayList的不同

1.vector中方法都用synchronized關鍵字修飾,執行緒安全 2.使用arraylist時,如果不指定大小,會生成乙個空的陣列 使用vector時,如果不指定大小,會預設生成乙個10個元素大小的陣列 2.vector 實現類中有乙個變數 capacityincrement 用來表示每次容...