標(biāo)準(zhǔn)的解釋:
- ArrayList不是線程安全的,Vector是線程安全的
- 底層數(shù)組容量不夠的時候,ArrayList拓展為原來的1.5倍,vector拓展為原來的2倍。
細(xì)細(xì)對比:
-
源碼實現(xiàn):
ArrayList的底層實現(xiàn):
ArrayList的源碼實現(xiàn)
Vector的底層實現(xiàn):
Vector的源碼實現(xiàn) -
方法的對比;
Vector的重要方法
get(……)
add(……)
remove(……)
isEmpty(……)
size(……)
capacity(……)
······
Vector的幾種方法
都使用了synchronized關(guān)鍵字,操作中會加鎖釋放鎖保證線程安全,但是會為系統(tǒng)帶來更多的開銷。
ArrayList則沒有該關(guān)鍵字,所以線程不安全。

ArrayList的方法
再看一點擴(kuò)容

ArrayList的擴(kuò)容方法grow

Vector的擴(kuò)容方法grow
1.5和2的對比
- 線程安全犧牲了時間空間,線程不安全效率上占優(yōu)勢。魚與熊掌不可兼得。
類似的組合還有:
| - | 線程安全 | 非線程安全 |
|---|---|---|
| StringBuilder | ? | |
| StringBuffer | ? | |
| HashMap | ? | |
| HashTable | ? |


