分析輪子(五)- Vector.java

注:玩的是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

相關文章
相關標籤/搜索