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的線程安全問題,但是同時帶來的是性能的下降。