從原始碼分析ArrayList和Vector區別

2021-07-30 09:25:14 字數 1771 閱讀 8809

最近在看jdk原始碼,現在從原始碼角度分析下arraylist和vector區別

注:本文原始碼基於jdk1.6

1.構造器

先從構造器入手在適合不過

arraylist有三個構造器:

public arraylist(int initialcapacity)//構造乙個具有指定初始容量的空列表。

public arraylist()//構造乙個初始容量為10的空列表。

public arraylist(collection<? extends e> c)//構造乙個包含指定 collection 的元素的列表

vector有四個構造方法:

public vector()//使用指定的初始容量和等於零的容量增量構造乙個空向量。

public vector(int initialcapacity)//構造乙個空向量,使其內部資料陣列的大小,其標準容量增量為零。

public vector(collection<? extends e> c)//構造乙個包含指定 collection 中的元素的向量

public vector(int initialcapacity,int capacityincrement)//使用指定的初始容量和容量增量構造乙個空的向量

總結:vector比arraylist多乙個構造方法,沒錯就是public 

vector

(int initialcapacity,int capacityincrement)這個構造方法,

capacityincrement就是容量增長,即前面所說的增長因子,arraylist中是沒有的

2.add方法

arraylist:

public void ensurecapacity(int mincapacity)

}vector:

private void ensurecapacityhelper(int mincapacity)

elementdata = arrays.copyof(elementdata, newcapacity);}}

總結:arraylist在記憶體不夠時預設是擴充套件50% + 1個,vector是預設擴充套件1倍

3.執行緒安全

vector中很多方法都是用關鍵字synchronized修飾而arraylist則沒有

總結:vector屬於執行緒安全級別的,但是大多數情況下不使用vector,因為執行緒安全需要更大的系統開銷

4.成員變數

arraylist:

private transient object elementdata;

vector:

protected object elementdata;

總結:arraylist和vector內部都是通過陣列實現,但arraylist是私有的不可序列化

ArrayList原始碼分析

arraylist是平時使用很多的乙個類,趁有時間,我也閱讀以下原始碼,以幫助自己加深理解。類的層次結構這裡就不列出了,主要分析一下原始碼部分,屬性部分 protected transient int modcount 0 這個屬性是從abstractlist繼承過來的,每次arraylist進行結...

ArrayList原始碼分析

有參建構函式傳入乙個int public arraylist int capacity 如果為0則返回空陣列,否則new 乙個capacity的陣列 array capacity 0 emptyarray.object new object capacity 無參建構函式 public arrayl...

ArrayList原始碼分析

最近因為擁抱變換,所以開始無奈的面試之路。因為在集合的原始碼分析上,出了些問題,所以這段時間,好好重新理一理常用的集合原始碼。版本基於jdk1.7 毫無疑問,提到常用集合。arraylist勢必是第乙個被搬出來的,因此我們就先拿它開刀了。arraylist的初始化,只有在第一次add的時候進行new...