Vector、ArrayList、LinkedList、CopyOnWriteArrayList區別


原創轉載請注明出處:https://www.cnblogs.com/agilestyle/p/11443907.html

 

CopyOnWriteArrayList

CopyOnWriteArrayList是java.util.concurrent包提供的方法,它實現了讀操作無鎖,寫操作則通過操作底層數組的新副本來實現,是一種讀寫分離的並發策略。 

CopyOnWrite它的原理是,任何修改操作,如add、set、remove,都會拷貝原數組,修改后替換原來的數組,通過這種防御性的方式,實現另類的線程安全。

所以這種數據結構,相對比較適合讀多寫少的操作,不然修改的開銷還是非常明顯的,適用於讀遠大於寫的場景。

Note:

CopyOnWriteArraySet是通過包裝了CopyOnWriteArrayList來實現的

 

Vector

Vector是Java早期提供的線程安全的動態數組,synchronized關鍵字幾乎修飾了所有對外暴露的方法,所以在讀遠大於寫的操作場景中,Vector將會發生大量鎖競爭,從而給系統帶來性能開銷。如果不需要線程安全,並不建議選擇,畢竟同步是有額外開銷的。Vector內部是使用對象數組來保存數據,可以根據需要自動的增加容量,當數組已滿時,會創建新的數組,並拷貝原有數組數據。

 

ArrayList

ArrayList是應用更加廣泛的動態數組實現,它本身不是線程安全的,所以性能要好很多。與Vector近似,ArrayList也是可以根據需要調整容量,不過兩者的調整邏輯有所區別,Vector在擴容時會提高1倍,而ArrayList則是增加50%。

 

LinkedList

LinkedList是Java提供的雙向鏈表,所以它不需要像上面兩種那樣調整容量,它也不是線程安全的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM