c++ vector拷贝构造_JDK源码分析-Vector
1. 概述
上文「JDK源碼分析-ArrayList」主要分析了 ArrayList 的實現原理。本文分析 List 接口的另一個實現類:Vector。
Vector 的內部實現與 ArrayList 類似,也可以理解為一個「可變數組」。其繼承結構如下(省略部分接口):
PS: 由于 Vector 目前使用較少,且官方也推薦在無線程安全的需求時使用 ArrayList 代替 Vector,這里僅研究其實現原理。stackoverflow 也有相關的討論:https://stackoverflow.com/questions/1386275/why-is-java-vector-and-stack-class-considered-obsolete-or-deprecated
2. 代碼分析
仍然從其構造器入手進行分析。
2.1 構造器
Vector 對外提供四個構造器(內部可以認為是兩個),其一:
protected與 ArrayList 類似,Vector 內部也維護了一個 Object 類型的數組(elementData)來存儲元素(默認初始容量也是 10)。不同的是:Vector 比 ArrayList 的構造器多了一個參數 capacityIncrement,該變量也導致了二者的擴容方式略有不同,后面進行分析。
其二:入參為集合的構造器
public2.2 擴容原理分析
我們仍從其 add() 方法入手進行分析:
public注意這里的關鍵字 synchronized。觀察可以發現:Vector 內部許多方法都使用了該關鍵字,這也是 Vector 實現線程安全的方式,簡單粗暴!
其擴容方法實現如下:
/**從這里可以看出,Vector 與 ArrayList 的擴容方式基本一致,只是新容量的計算方式有所不同,這里分析下其新容量大小:
intVector 計算擴容后的新容量時,根據 capacityIncrement 的值可以分為兩種情況:
3. 線程安全性
Vector 是線程安全的,它實現線程安全的方式也很簡單粗暴:直接在方法上使用 synchronized 關鍵字進行同步。
4. 小結
總結
以上是生活随笔為你收集整理的c++ vector拷贝构造_JDK源码分析-Vector的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分拆上市对母公司影响?
- 下一篇: python input输入多个变量_「