Vector是在Collections API以前就已經產生了的, 而ArrayList是在JDK1.2的時候才做爲Collection framework的一部分引入的. 它們都是在內部用一個Obejct[]來存儲元素的. html
1. 線程安全
Vector是同步的, 而ArrayList不是.
由於Vector是同步的, 因此它是線程安全的.
一樣, 由於Vecotr是同步的, 因此他須要額外的開銷來維持同步鎖, 因此它要比ArrayList要慢.(理論上來講) java
固然, 若是你對ArrayList有偏好, 你也能夠用Collection.synchronizedList(List)來獲得一個線程安全的List. 數組
2. 容量增加
Vector容許用戶設置capacityIncrement這樣在每次須要擴充數組的size的時候, Vector會嘗試按照預先設置的capacityIncrement做爲增量來設置, 而ArrayList則會把數組的大小擴大一倍.
好比如今一樣一個長度爲10的Vector和ArrayList, 咱們把Vector的capacityIncrement設爲1
那麼咱們在插入第11個對象的時候, Vector會將長度變成11, 而後分配空間, 而後將對象添加進去, 而ArrayList則會分配20個對象的空間, 而後將對象添加進去.
若是capacityIncrement設爲0或者負值, Vector就會作和ArrayList同樣, 每次都將數組大小擴大一倍.
安全
3. 性能比較
剛剛在上面已經說過了, 因爲Vector是同步的, 而ArrayList不是, 因此Vector的性能要比ArrayList要稍低一點, 用性能換安全嘛.
不過, 據Jack Shirazi在OnJava上的一篇文章來看, 彷佛這並非什麼問題, 他認爲對於如今的JVM來講, 這兩個類在同步這個問題上的性能差別, 甚至還不如每次跑測試的時候環境變化引發的差別大.
Consequently Vector is thread-safe, and ArrayList isn't. This makes ArrayList faster than Vector. For some of the latest JVMs the difference in speed between the two classes is negligible: strictly speaking, for these JVMs the difference in speed between the two classes is less than the variation in times obtained from tests comparing the performance of these classes. ---- The Performance of Java's Lists
less
結論和網上大多數人獲得的結論同樣:
在通常狀況下, 仍是鼓勵用ArrayList的, 若是你有同步控制的須要, 那就用Vector吧, 也懶得用Collection.synchronizedList(List)再去轉一次了, 除非非這樣不可.. 否則仍是順應潮流, 畢竟, 代碼是寫給人看的. 在無傷大雅的狀況下, 按照common的法則來寫, 無疑會讓看代碼的人更快理解. :)
性能