在多執行緒的情況下,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...