【JDk源碼解析之四】Vector源碼解析

1.Vector也是集合類,繼承和實現方式如下,它也是實現了list接口。很多博客說Vector和ArrayList基本都是一樣的,只不過Vector是線程安全的。但是具體是什麼樣的,還需要簡單看看源碼。當然其實還是有區別的,只是區別不大。


2.Vector的屬性定義

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


Vector的構造方法如下。簡單粗暴,如果調用無參構造函數,直接就將初始容量設置成了10,最終在右側的構造方法裏,將數組的長度設置爲10,並初始化capacityIncrement。capacityIncrement這個值直接關係到數組擴容的方式。


具體來說,當capacityIncrement爲正數時候,每次就增加capacityIncrement個數組長度,如果capacityIncrement爲0,也就是我們通常調用無參構造方法的那種情況,這時候,每次擴容是變爲原來的二倍,也就是增加一個Capacity。


3.爲什麼說Vector是線程安全的,因爲它對外的接口方法加入了同步關鍵字----synchronized。如此,程序可以併發訪問,也就避免了多線程帶來的線程安全問題。圖中給的例子比較少,基本去看看源碼就知道了。其他時候,Vector並沒有和ArrayList有本質的區別,所以就不一一看了。


4.總結

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

Vector的方法通過同步關鍵字實現了同步,解決了ArrayList的線程安全問題,但是同時帶來的是性能的下降。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章