//與arraylist一樣,vector的底層也是使用陣列elementdata進行儲存資料
protected object[
] elementdata;
//當前elementdata陣列中元素的個數
protected int elementcount;
//當前elementdata陣列進行擴容的增量
protected int capacityincrement;
//序列化版本號
private
static final long serialversionuid =
-2767605614048989439l;
小結:vector集合的底層為陣列,對vector集合的操作,其實就是對底層elementcount陣列的操作
vector構造方法有4個,分別是:
public
vector
(int initialcapacity, int capacityincrement)
public
vector
(int initialcapacity)
public
vector()
public
vector
(collection<
?extends
e> c)
小結:
接下來思路一樣,我們通過類似debug的形式呼叫add方法,新增第一元素,來分析vector在add元素時,新增元素以及擴容中,整個過程中原始碼的具體實現
//建立乙個vector集合,通過上面vector構造方法初始化,我們知道此時底層elementdata陣列,長度容量elementdata.length==10,元素個數elementcount==0,擴容增量capacityincrement==0
list strlist =
newvector
()
//新增第乙個元素
strlist.
add(
"我是第1個元素"
);
public synchronized boolean add
(e e)
注意:vector大量的方法基本上均加synchronized修飾,因此vector是執行緒安全的,而arraylist是沒有synchronized進行修飾的,因此arraylist不是執行緒安全,兩個集合之間的區別,在以後我們會進行分析對比,在這裡不做重點討論
private
void
ensurecapacityhelper
(int mincapacity)
小結:當元素個數小於elementdata.length時,vector此時不進行擴容,否則超過,則vector集合則進行擴容,當然從我們此時只add了第乙個元素,不會走下面的擴容grow(int mincapacity),但是當我們元素個數超過elementdata.length時,我們接著看看vector的擴容機制是怎麼實現的
注意:接下來的分析假設是add第11個元素,此時mincapacity - elementdata.length > 0,
mincapacity==11,傳入grow(11)
private
void
grow
(int mincapacity)
private
static final int max_array_size
= integer.
max_value-8
;private
static int hugecapacity
(int mincapacity)
Vector原始碼分析
說實話vector在工作中用的比較少,至少我沒有用到過。vector在面試中經常用來和arraylist進行比較,但凡知道 vector的都應該知道vector是執行緒安全的,而arraylist是執行緒不安全的,究其原因其實就是因為vector在增 改 刪操方法加了synchronized,利用鎖...
vector原始碼分析
vector和arraylist操作基本相同,只不過對方法加了synchronized做同步處理,以add方法為例 擴容重點步驟 確定擴容的大小 private intnewcapacity int mincapacity return newcapacity max array size 0 ne...
Vector原始碼分析
vector資料結構是陣列。1 繼承abstractlist,實現了list。因此底層的資料結構是陣列。2 實現了介面randomaccess,表明可以隨機訪問元素。3 實現了介面cloneable,表示可以進行轉殖。2 實現了介面serializable,表明可以序列化 儲存的集合元素 prote...