Vector原始碼解析 JDK1 8

2021-09-25 11:32:36 字數 1892 閱讀 4723

ensurecapacity(int mincapacity)  擴容
public synchronized void ensurecapacity(int mincapacity) 

}private void ensurecapacityhelper(int mincapacity)

private void grow(int mincapacity)

擴容過程:計算新容量 increment > 時為原容量 + increment,否則為原容量 * 2; 然後判斷新容量與mincapacity較大值,賦給新容量; 按照新容量建立新陣列。 注意ensurecapacity是同步方法。

add(e e)  

public synchronized boolean add(e e)
add(int index, e element) 

public void add(int index, e element) 

public synchronized void insertelementat(e obj, int index)

ensurecapacityhelper(elementcount + 1); // 確認容量

system.arraycopy(elementdata, index, elementdata, index + 1, elementcount -

index); // 將index開始的一起移動到index+1開始

elementdata[index] = obj; // 賦值

elementcount++;

}

可以看到add操作和arraylist幾乎一樣,,只是加了synchronized。

remove(int index) 

public synchronized e remove(int index)
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很相似,加上了synchronized。 通過複製陣列實現,,addall、removeall也是複製陣列實現。

toarray() 與 toarray(t a) 與arraylist一樣,加上synchronized。

iterator()方法內next()與remove()加上synchronized。

vector內部用來大量的synchronized保證同步,是執行緒安全的list實現

通過capacity指定陣列容量,capacityincrement指定擴容增量。capacityincrement<=0時,新容量為原來2被,否則新容量為(原容量 + capacityincrement )。這並不是最後的容量,而是用新容量與指定的mincapacity比較,取較大值作為最後的新容量。

方法實現方式與arraylist相同,只是加入了同步機制。

也實現了randomaccess介面,遍歷時用for(int i=0;i

ThreadLocal 原始碼分析 jdk1 6

相信很多做分布式web開發的都封裝過這樣的乙個工具用來管理當前登入的使用者。在 裡面把使用者set進來 在controller 裡面get 出來使用 而且都是基於threadlocal 這個模板類來封裝的,出於好奇跟蹤進原始碼一 竟 這裡簡單寫個例子 public class baseloginco...

Vector原始碼解析 jdk1 8

概述 vector實現了list的介面,底層同樣是基於陣列實現的,可以儲存null。功能結構與arraylist的類似,不同的是執行緒安全的。建構函式protected object elementdata protected int capacityincrement public vector ...

JDk原始碼解析之四 Vector原始碼解析

具體的三個屬性 解釋看圖中注釋。vector沒有採取arraylist臨界值擴容的辦法,而是每次不夠的時候,直接根據capacity的值來增加。具體怎麼增加後面會說。vector的構造方法如下。簡單粗暴,如果呼叫無參建構函式,直接就將初始容量設定成了10,最終在右側的構造方法裡,將陣列的長度設定為1...