vector與arraylist一樣,同屬於abstractlists的子類,但與arraylist不同的是,它對於內部對元素的操作方法都是同步的,即執行緒安全的,但隨之而來的就是效率問題,它的操作效率會略低於arraylist
//vector內部維護的陣列,用於儲存元素
protected object elementdata;
//儲存元素的長度大小
protected int elementcount;
//擴容增長量,預設是0,當是0時,每次擴容按原量的1倍擴;若大於0,就按該量來擴容
protected int capacityincrement;
//確定初始容量的大小,及擴容增長量
public vector(int initialcapacity, int capacityincrement)
//確定初始容量大小,並設定擴容增長量為0,這種情況下,每次擴容會擴容至原來的2倍
public vector(int initialcapacity)
//無參構造方法,設定初容量大小為10
public vector()
//將集合複製給elementdata
public vector(collection extends e> c)
add(e e);
public synchronized boolean add(e e)
首先,操作次數加一
呼叫ensurecapacityhelper(int mincapacity),引數為當前元素的數量加一
private void ensurecapacityhelper(int mincapacity)
該方法是判斷是否需要擴容,如果增長之後的元素數量大於陣列的大小,即需要擴容,呼叫grow(int mincapacity)方法
private void grow(int mincapacity)
該方法就是擴容的方法,這裡就用到了之前建構函式指定的擴容增長量:①capacityincrement 。如果該量大於0,就增加該量的大小;如果該量小於等於0,則擴容至原量的2倍
②如果擴容之後的量還是小於新增元素之後的容量大小,就擴容至增加元素之後的容量大小
③複製陣列
將元素賦到陣列中
remove(object o)
public boolean remove(object o)
public synchronized boolean removeelement(object obj)
return false;
}public synchronized void removeelementat(int index)
else if (index < 0)
int j = elementcount - index - 1;
if (j > 0)
elementcount--;
elementdata[elementcount] = null; /* to let gc do its work */
}
跟arraylist一樣,最重要的就是理解擴容機制。
刪除方法跟增加方法差不多,都是通過複製陣列的方式對元素進行操作,而這裡就是arraylist、vector與linkedlist對於增刪操作效率差異的原因了。
Vector原始碼分析
與arraylist一樣,vector的底層也是使用陣列elementdata進行儲存資料 protected object elementdata 當前elementdata陣列中元素的個數 protected int elementcount 當前elementdata陣列進行擴容的增量 pro...
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...