Arraylist源碼分析
Arraylist集合底層使用動態(tài)數(shù)組實現(xiàn)驱富,隨機查詢效率非常快题翻,插入和刪除需要移動整個數(shù)組、效率低腰鬼,ArrayList不是線程安全的嵌赠、 Vector是線程安全的集合。
Vector 源碼分析:
1.默認構(gòu)造函數(shù)中對數(shù)組的擴容為長度是為10垃喊;(如果創(chuàng)建了集合猾普,沒有使用的話是比較占用內(nèi)存的);
2.Vector集合實現(xiàn)add方法的時候有synchronized關(guān)鍵字修飾本谜;
3.Vector集合默認數(shù)組擴容是增長一倍初家,可以自己指定擴容倍數(shù) (使用構(gòu)造函數(shù)傳遞)
特點:線程安全,并發(fā)的時候讀非常慢
Arraylist與Vector集合區(qū)別
相同點:
都是實現(xiàn)與List接口乌助、底層采用數(shù)組實現(xiàn)
不同點:
Arraylist線程不安全溜在、Vector線程是安全集合
Arraylist底層擴容是原數(shù)組的50%,Vector集合是原數(shù)組的100%
Arraylist底層數(shù)組沒有默認長度為0他托,Vector底層數(shù)組默認長度為10
Vector集合中可以使用capacityIncrement增長容量
CopyOnWriteArrayList
實現(xiàn)了List接口
內(nèi)部持有一個ReentrantLock lock = new ReentrantLock();
底層是用volatile transient聲明的數(shù)組 array
讀寫分離掖肋,寫時復(fù)制出一個新的數(shù)組,完成插入赏参、修改或者移除操作后將新數(shù)組賦值給array
特點:線程安全志笼,寫很慢,適合讀多寫少的場景
Fail-Fast機制原理
Fail-Fast是我們Java集合框架為了解決集合中結(jié)構(gòu)發(fā)生改變的時候把篓,快速失敗的機制纫溃。
本文參考螞蟻課堂:http://www.mayikt.com/#