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

2021-07-30 14:51:42 字數 950 閱讀 5159

具體的三個屬性 解釋看圖中注釋。vector沒有採取arraylist臨界值擴容的辦法,而是每次不夠的時候,直接根據capacity的值來增加。具體怎麼增加後面會說。

vector的構造方法如下。簡單粗暴,如果呼叫無參建構函式,直接就將初始容量設定成了10,最終在右側的構造方法裡,將陣列的長度設定為10,並初始化capacityincrement。capacityincrement這個值直接關係到陣列擴容的方式。

具體來說,當capacityincrement為正數時候,每次就增加capacityincrement個陣列長度,如果capacityincrement為0,也就是我們通常呼叫無參構造方法的那種情況,這時候,每次擴容是變為原來的二倍,也就是增加乙個capacity。

3.為什麼說vector是執行緒安全的,因為它對外的介面方法加入了同步關鍵字----synchronized。如此,程式可以併發訪問,也就避免了多執行緒帶來的執行緒安全問題。圖中給的例子比較少,基本去看看原始碼就知道了。其他時候,vector並沒有和arraylist有本質的區別,所以就不一一看了。

vector也是基於動態陣列實現的,預設初始化容量為10,每次擴容為原來的2倍或者增加給定的數量。如果擴容一次後,發現容量還不夠,那麼直接將容量設定為相應的大小。

vector的方法通過同步關鍵字實現了同步,解決了arraylist的執行緒安全問題,但是同時帶來的是效能的下降。

原始碼解析 JDK原始碼之LinkedHashMap

linkedhashmap原始碼,基於 jdk1.6.43 他繼承了hashmap,並且實現了插入和訪問的有序功能 public class linkedhashmapextends hashmapimplements map 其也有乙個entry內部類,繼承了 hashmap 的entry 內部類...

jdk原始碼解析二之HashMap

hashmap的loadfactor為什麼是0.75?主要涉及到泊松分布的概念,猝 乙個bucket空和非空的概率為0.5,通過牛頓二項式等數學計算,得到這個loadfactor的值為log 2 約等於0.693.同回答者所說,可能小於0.75 大於等於log 2 的factor都能提供更好的效能,...

JDK原始碼解析 ThreadLocal

說明 本文是jdk 1.8版本 1.簡介 threadlocal 又叫做執行緒本地變數,也被稱為執行緒本地儲存。threadlocal 為 變數 在每乙個執行緒中建立 乙個 副本 不是原來變數的引用 每乙個執行緒都會獨自擁有變數副本,而不會相互影響。2.實現方式 1 set 方法,因為執行緒thre...