注:玩的是JDK1.7版本html
一: 先上類圖,從類圖上看和 ArrayList.java 很是相像,可查看 分析輪子(一)-ArrayList.javajava
二:而後看源碼,發現和 ArrayList.java 各類實現上也很是的相像,他們的底層數據結構都是數組,而且均可以動態擴展,因此,再也不重述了,有興趣能夠查看 分析輪子(一)-ArrayList.java數組
/** * The array buffer into which the components of the vector are * stored. The capacity of the vector is the length of this array buffer, * and is at least large enough to contain all the vector's elements. * * <p>Any array elements following the last element in the Vector are null. * * @serial */ protected Object[] elementData;
三:如此相似的類爲何須要兩個呢?寫JDK源碼的人怎麼可能犯這個錯誤,來看看他們的不一樣點吧!安全
1)當須要擴展空間時,ArrayList.java 增長原來的一半 Vector.java 增長原來的一倍數據結構
2)ArrayList.java 非線程安全 Vector.java 是線程安全post
Vector.java 類的許多方法都使用了 synchronized 同步關鍵字來修飾了,表明 Vector.java 是一個線程安全的類!固然,對應的代價嘛!就是開銷相對會大一些。加鎖後爲何開銷會大一些呢?this
想像一下,你在北京天安門附近有一座四合院,大門、小門、臥室門你都上鎖了,你晚上寫完代碼,下班後到家休息的時候,是否是要一個個得到鎖,而後一個個的開鎖,才能進門休息,是否是有點費事費時呢?url