閱讀Vector原始碼記錄的一些筆記

2021-08-31 07:23:08 字數 3427 閱讀 8235

在多執行緒的情況下,arraylist和linkedlist都是執行緒不安全的,vector是執行緒安全的,arraylist是基於陣列實現的,linkedlist是基於雙向鍊錶實現,而vector的實現也是基於陣列的,從資料結構來看,vector和arraylist應該很像,實時也是如此,基本上兩者的實現邏輯是一樣的,只是vector的大部分方法為了保證其在併發環境下安全性,都會加上關鍵字synchronized關鍵字,所以相對於arraylist來說,vector的效率更低。

protected object[

] elementdata;

// 儲存資料用的陣列

protected

int elementcount;

// 長度

protected

int capacityincrement;

// 每次擴容的大小,如果為0,則按照預設擴容規則擴容

無參構造方法初始化的時候預設長度是10

public

vector()

此時每次擴容的容量值預設為0

public

vector

(int initialcapacity)

以上兩個構造方法,最終都是呼叫了這個構造方法來實現初始化

public

vector

(int initialcapacity,

int capacityincrement)

像arraylist、linkedlist和vector在依照給定的集合構造的時候,都會先把集合轉化為陣列,然後再進行操作

public

vector

(collection<

?extends

e> c)

public

synchronized

boolean

add(e e)

private

void

ensurecapacityhelper

(int mincapacity)

// 擴容

private

void

grow

(int mincapacity)

private

static

inthugecapacity

(int mincapacity)

public

void

add(

int index, e element)

public

synchronized

void

insertelementat

(e obj,

int index)

ensurecapacityhelper

(elementcount +1)

;// 校驗是否需要擴容

// 把index位置以及其後的資料後移

system.

arraycopy

(elementdata, index, elementdata, index +

1, elementcount - index)

; elementdata[index]

= obj;

// 賦值

elementcount++

;}

public

synchronized

boolean

addall

(collection<

?extends

e> c)

大致就是把index以及其後的元素往後移動足夠的位置(numnew),然後用集合中的元素覆蓋index位置到index + numnew位置上的資料

public

synchronized

boolean

addall

(int index, collection<

?extends

e> c)

public

synchronized e remove

(int index)

public

boolean

remove

(object o)

public

synchronized

boolean

removeelement

(object obj)

return

false;}

public

intindexof

(object o)

public

synchronized

intindexof

(object o,

int index)

else

return-1

;}

迴圈把所有的元素都置空

public

void

clear()

public

synchronized

void

removeallelements()

public

synchronized e set

(int index, e element)

public

synchronized e get

(int index)

public

synchronized

intsize()

public

synchronized

boolean

isempty()

public

boolean

contains

(object o)

三種最常用的遍歷方法

public

void

testvector2()

for(string str : vector)

iterator

iterator = vector.

iterator()

;while

(iterator.

hasnext()

)}

Java原始碼閱讀之Vector

vector與arraylist區別 protected object elementdata protected int elementcount protected int capacityincrement private static final int max array size int...

JDK原始碼閱讀 Vector實現

vector同樣繼承自abstractlist,與arraylist linedlist一樣,是list的一種實現 與arraylist一樣,也是使用物件陣列儲存元素 protected object elementdata 記錄元素的個數 protected intelementcount 每次動...

mybatis原始碼閱讀記錄

深入淺出mybatis 技術原理與實戰 楊開振著 大體結構 sqlsessionfactory defaultsqlsessionfactory 構建sqlsession configuration xml檔案的記憶體表達 sqlsession下的四個物件 executor 執行器,用來排程stat...