說實話vector在工作中用的比較少,至少我沒有用到過。vector在面試中經常用來和arraylist進行比較,但凡知道
vector的都應該知道vector是執行緒安全的,而arraylist是執行緒不安全的,究其原因其實就是因為vector在增、改、
刪操方法加了synchronized,利用鎖來保證執行緒安全。
vector也繼承了abstractlist,實現了list、randomaccess、cloneable、serializable等介面,和arraylist繼承關係是一樣的。vector類中變數:
/*
* 真正儲存元素的陣列
*/protected object[
] elementdata;
/** * 陣列中元素的真正個數
*/protected
int elementcount;
/** * 擴容時的增長係數,若為0,擴容時容量成倍增長
* 若不為0,擴容後容量:原來容量+capacityincrement
*/protected
int capacityincrement;
public
vector()
public
vector
(int initialcapacity)
public
vector
(int initialcapacity,
int capacityincrement)
4.1 add(e e)
可以看到add方法被synchronized 修飾,鎖就是當前物件(this)。
public
synchronized
boolean
add(e e)
private
void
ensurecapacityhelper
(int mincapacity)
private
void
grow
(int mincapacity)
4.2 addelement(e obj)
其實操作和前面的add(e e)是一樣的
public
synchronized
void
addelement
(e obj)
4.3 insertelementat(e obj, int index)
這裡有一點需要注意,elementcount是vector儲存元素的個數。
public
synchronized
void
insertelementat
(e obj,
int index)
//2.是否需要擴容
ensurecapacityhelper
(elementcount +1)
;//3.直接將index之後的元素copy到elementdata index之後的位置
system.
arraycopy
(elementdata, index, elementdata, index +
1, elementcount - index)
;//4.插入元素
elementdata[index]
= obj;
elementcount++
;}
public
synchronized e get
(int index)
有一點需要注意,修改elelmentdata中某個元素時,modcount並沒有自增。
public
synchronized e set
(int index, e element)
public
synchronized
void
removeelementat
(int index)
else
if(index <0)
int j = elementcount - index -1;
if(j >0)
elementcount--
; elementdata[elementcount]
= null;
}
對於vector的實現其實基本上和arraylist一樣的,只不過vector是執行緒安全,而arraylist是非執行緒安全的;vector擴容方式和arraylist的擴容方式不同,vector有擴容因子,而arraylist是直接1.5倍擴容。 Vector原始碼分析
與arraylist一樣,vector的底層也是使用陣列elementdata進行儲存資料 protected object elementdata 當前elementdata陣列中元素的個數 protected int elementcount 當前elementdata陣列進行擴容的增量 pro...
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...