JDK原始碼閱讀 Vector實現

2022-04-23 11:36:30 字數 1384 閱讀 5797

vector同樣繼承自abstractlist,與arraylist、linedlist一樣,是list的一種實現

//

與arraylist一樣,也是使用物件陣列儲存元素

protected

object elementdata;

//記錄元素的個數

protected

intelementcount;

//每次動態擴容時陣列長度增長的長度,可在初始化的時候設定

protected

int capacityincrement;

與arraylist一樣,vector也是使用物件陣列記錄元素的值,記錄陣列長度使用elementcount,與arraylist不一樣的是,vector每次陣列擴容的長度可在初始化的時候設定,用變數capacityincrement記錄

public vector(int initialcapacity, int

capacityincrement)

public vector(int

initialcapacity)

public

vector()

public vector(collection extends e>c)

如上有四種構造方法,支援無參構造,設定初始長度構造、初始長度和擴容增長長度構造和傳入乙個collection物件進行構造。

其餘三種構造方法與arraylist基本一樣,只是與arraylist不一樣的是,vector支援在構造的時候設定每次動態擴容陣列長度增長的值,而arraylist預設每次擴容都是在當前陣列長度的基礎上增加一般,具體實現如下:

private

void grow(int

mincapacity)

而vector如果在初始化的時候不設定這個值得話,每次擴容則在當前陣列長度的基礎上增加一倍,實現如下

private

void grow(int

mincapacity)

vector作為list的一種實現,由於其與arraylist一樣使用物件陣列來儲存元素,所以其提供的方法與arraylist基本類似,但是所有方法的定義都多了乙個關鍵字synchronized,相信大家已經知道vector存在的意義了,那麼就是vector是執行緒安全的。這也是它與arraylist的根本區別。

這也決定了arraylist和vector在使用上的區別。由於arraylist不考慮執行緒安全,所以在執行效率上,arraylist是優於vector的,所以在不需要考慮執行緒安全,或者永遠都只會有乙個執行緒能訪問到list物件時,最好使用arraylist,而在可能會有多個線層訪問同乙個list集合時,使用vector無疑是最佳選擇,因為它的實現已經考慮了執行緒安全的問題。

JDK 原始碼 閱讀

to be continuing.持續修改中。1.stringbuffer 所處類層次 易忽略點 這個類是執行緒安全的。所有的method直接或間接加synchronized。所以我們如果是單執行緒情況下也考慮到這個會不會影響到效率。當然可能jit可以進行這個優化,待我接下來驗證。預設情況下乙個長為...

JDK原始碼分析 Vector

vector和arraylist有一定的不同 int newcapacity oldcapacity capacityincrement 0 capacityincrement oldcapacity 從這一句我們可以看出 增長容量 capacityincrement 0 增長倍數 陣列數量 舊容量...

jdk原始碼閱讀 linkedlist

首先還是從建構函式開始 constructs an empty list.public linkedlist 是乙個空的 然後我們從add看 public boolean add e e 定位到linklast void linklast e e 觀察發現這個node是乙個雙向鍊錶,每乙個節點指著自...