1.首先我們從它們底層數據結構來分析
(1)Arraylist 和 Vector都是基於數組實現的,你可以從它的單詞結構構成都可以看出,但是這個兩個還是有一點點區別的
Arraylist的實現原理是采用一個動態對象數組實現的,默認構造方法創建一個空數組


Vector的實現原理也是采用一個動態對象數組實現的,只不過它的默認構造方法創建一個大小為10的對象數組




(2) Arraylist第一次添加元素時候,擴展容量為10,之后的擴充算法:原來數組大小+原來數組的一半(也就是1.5倍)




應該可以很清楚的知道ArrayList底層擴容的原理了。而Vector和Arraylist的擴容機制類似,與Vector不同的是,Vector分兩種情況如果增量為0的情況下每次擴容容量是翻倍,即為原來的2倍,而當增量>0的時候,擴充為原來的大小加增量,而ArrayList是1.5倍。看似1.5倍增長的很慢,那經常增加大量元素會不會導致經常擴容,數組重新分配導致效率低下呢?其實不然,每次增長為原來的1.5倍實際增長的量會越來越大的
(3)所以Arraylist和Vector不適合進行刪除或插入操作
(4)為了防止數組動態擴充過多,建議創建ArrayList或者Vector時,給定初始容量。
(5)Arraylist多線程中使用不安全,適合在單線程訪問時使用,效率較高,而Vector線程安全,適合在多線程訪問時使用,效率較低
