Java集合之Vector源码分析
概述
Vector與ArrayLIst類似, 內部同樣維護一個數組, Vector是線程安全的. 方法與ArrayList大體一致, 只是加上 synchronized 關鍵字, 保證線程安全, 下面就不具體分析源碼了, 具體可以查看ArrayList中的源碼分析.
Vector源碼分析
1.主要字段
?
2.構造函數
?
?
3.增刪改查
?
其他方法大部分類似, 不再贅述, 下面看下擴容機制的函數:
?
?
Vector與ArrayList的區別
Vector與Collections.synchronizedList
Vector是java.util包中的一個類。 SynchronizedList是java.util.Collections中的一個靜態內部類。
在多線程的場景中可以直接使用Vector類,也可以使用Collections.synchronizedList(List list)方法來返回一個線程安全的List。
那么,到底SynchronizedList和Vector有沒有區別,為什么java api要提供這兩種線程安全的List的實現方式呢?
以下看 synchronizedList 部分源碼:
?
?
?
?
?
從代碼中, 我們可以看出:
但是, SynchronizedList中 listlterator方法并沒有做同步處理, 但是在Vector卻對該方法加了方法鎖. 所以, 在使用SynchronizedList進行遍歷的時候要手動加鎖.
?
但是之后的但是, 如果想要把LinkedList變成線程安全的, 那么我們可以將已有的LinkedList直接轉成SynchronizedList, 而不用改變它的底層數據結構, 這一點是Vector無法做到的, 因為Vector底層結構是使用數組的, 這一點是無法更改的.
總結兩者區別如下:
總結
以上是生活随笔為你收集整理的Java集合之Vector源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用java实现楼层导航_JS实现网站楼层
- 下一篇: Java集合之LinkedHashSet