LinkedList,Vector,ArrayList,CopyOnWriteArrayList源碼簡單分析

    我們經常聽說LinkedList、vector、ArrayList以及CopyOnWriteArrayList,就以add爲例(我寫的僅僅是記錄,之後會繼續研究,希望大佬們多多提建議)

    1、LinkedList:

        

        你會發現其中調用了linkLast()這個方法,在查看的時候,其中的方法應該是可以看懂的吧(有可能不正確,僅供參考使用哦),指針指向的是數據地址

            

        這樣的話數據就會被添加到list中,結構就是下面圖片中顯示的那樣,它只記錄的相鄰的兩個數據的上下數據節點,而且因爲是一個環鏈,所以最後一條數據會與第一條數據相互記錄

            

        但是當你選擇添加數據的位置時,調用了linkBefore這個方法,可以看到,其中更改的也是指針指向

            

    2、Vector

               

        

        Vector會默認賦予長度爲10的空間,當空間不夠數據存儲時,如果沒有指定新增空間大小,那麼會以兩倍的方式增長

        

        注:vector是用synchronized來修飾方法的

    3、ArrayList:

        這個其實與Vector 一樣,只不過Vector是線程安全的而ArrayList是線程不安全的,而且ArrayList在擴容的時候擴容因子是1.5,所以在執行效率上,ArrayList是比Vector快不少的

            

            

            上面的minCapacity有可能是用戶自己輸入的初始容量

            

            在這與Vector不一樣的是,ArrayList的擴容是 1.5n + 1,而且如果使用的是無參構造函數,那麼ArrayList是不會開闢默認空間的

            

    4、CopyOnWriteArrayList:

        

       從上圖可以看出CopyOnWriteArrayList使用了鎖,並且會在下圖的方法中,進行兩次複製,將修改過後的值返回,如果在返回之前讀取該數據,那麼讀取到的數據將會是舊數據

        

        注:CopyOnWriteArrayList是用ReentrantLock來加鎖的

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章