概述
vector實現了list的介面,底層同樣是基於陣列實現的,可以儲存null。功能結構與arraylist的類似,不同的是執行緒安全的。
建構函式
protected object elementdata;
protected
int capacityincrement;
public
vector()
public
vector(int initialcapacity)
public
vector(int initialcapacity, int capacityincrement)
建構函式中,初始化了儲存元素的陣列elementdata和容量增量的值。
新增元素add/addall
vector使用add來新增元素:
public
synchronized
boolean
add(e e)
private
void
ensurecapacityhelper(int mincapacity)
private
void
grow(int mincapacity)
private
static
inthugecapacity(int mincapacity)
使用add直接新增元素的時候,首先通過ensurecapacityhelper來確認儲存元素的陣列的容量時候足夠。如果不夠,則進行grow擴容,增量大小為:(容量增量*陣列長度)。確認完容量之後,直接將元素新增到陣列後面。
vector還提供了在指定位置上新增元素:
public
void add(int
index, e element)
public synchronized void insertelementat(e obj, int
index)
ensurecapacityhelper(elementcount + 1);
system.arraycopy(elementdata, index, elementdata, index + 1, elementcount - index);
elementdata[index] = obj;
elementcount++;
}
首先判斷index的合法性,然後通過system.arraycopy將元素插入到指定的位置中。
刪除元素remove/removeall
vector使用remove來刪除元素:
public
boolean
remove(object o)
public
synchronized
boolean
removeelement(object obj)
return
false;
}public
intindexof(object o)
//存在該物件時,返回當前索引值,否則返回-1
public
synchronized
intindexof(object o, int index) else
return -1;
}public
synchronized
void
removeelementat(int index)
else
if (index < 0)
int j = elementcount - index - 1;
//刪除對應index位置上的元素
if (j > 0)
elementcount--;
elementdata[elementcount] = null; /* to let gc do its work */
}
vector使用removeall來刪除元素:
public
synchronized
boolean
removeall(collection<?> c)
呼叫父類的方法,abstractcollection中removeall:
objects.requirenonnull(c);
boolean modified = false;
iterator<?> it = iterator();
while (it.hasnext())
}return modified;}
上面分析的add/addall/remove/removeall等方法都是介面list提供的方法,vector自身也提供了方法來操作元素:
//新增元素
public
synchronized
void
addelement(e obj)
//刪除元素
public
synchronized
boolean
removeelement(object obj)
return
false;
}//刪除所有元素
public
synchronized
void
removeallelements()
//清除所有元素
public
void
clear()
總結:
1. vector與arraylist一樣,都可以動態改變陣列的容量大小,可以通過索引下標來查詢指定位置的值。
2. 與arraylist最大的區別就是vector的操作都是執行緒安全的,所以它的執行效率比arraylist的低。
ThreadLocal 原始碼分析 jdk1 6
相信很多做分布式web開發的都封裝過這樣的乙個工具用來管理當前登入的使用者。在 裡面把使用者set進來 在controller 裡面get 出來使用 而且都是基於threadlocal 這個模板類來封裝的,出於好奇跟蹤進原始碼一 竟 這裡簡單寫個例子 public class baseloginco...
Vector原始碼解析 JDK1 8
ensurecapacity int mincapacity 擴容public synchronized void ensurecapacity int mincapacity private void ensurecapacityhelper int mincapacity private voi...
JDk原始碼解析之四 Vector原始碼解析
具體的三個屬性 解釋看圖中注釋。vector沒有採取arraylist臨界值擴容的辦法,而是每次不夠的時候,直接根據capacity的值來增加。具體怎麼增加後面會說。vector的構造方法如下。簡單粗暴,如果呼叫無參建構函式,直接就將初始容量設定成了10,最終在右側的構造方法裡,將陣列的長度設定為1...