概述
arraylist
是乙個動態陣列,陣列大小可變,它實現了list
介面,並且實現了list
中所有對元素操作的方法。arraylist
刪除元素時間複雜度為o(n),其他方法如isempty
、get
、size
時間複雜度都為o(1)。arraylist
底層實現是陣列,每乙個arraylist
例項都有乙個capacity
屬性,這個屬性表示arraylist
中儲存元素的數量。在新增大量元素前,arraylist
會進行擴容操作,這樣避免了大量的重新分配記憶體的操作。當新增乙個元素後,arraylist
的容量會自動增大,由於擴容操作非常耗時,所以初始化arraylist
時最好把容量設定大一些。
成員變數
/**
* 預設的初始化容量是10
*/private
static
final
int default_capacity =10;
/** * 陣列長度為0的空陣列
*/private
static
final object[
] empty_elementdata =
;/* 用於預設大小空例項的共享空陣列例項。
* 我們將defaultcapacity_empty_elementdata和empty_elementdata區別開來
* 以便在新增第乙個元素時知道要膨脹多少。
*/private
static
final object[
] defaultcapacity_empty_elementdata =
;/**
* 底層是乙個object陣列
*/transient object[
] elementdata;
/** * arraylist的大小
*/private
int size;
構造方法/**
* 指定容量的構造方法
*/public
arraylist
(int initialcapacity)
else
if(initialcapacity ==0)
else
}/**
* 不指定陣列容量則使用預設容量為10的空陣列
*/public
arraylist()
add方法以及擴容流程/**
* 在陣列最後新增新的元素
* 新增元素前確保內部容量夠用,否則進行擴容操作
*/public
boolean
add(e e)
// 確定擴容的最小容量
public
void
ensurecapacity
(int mincapacity)
}// 計算 elementdata陣列的容量
private
static
intcalculatecapacity
(object[
] elementdata,
int mincapacity)
return mincapacity;
}// 確定陣列內部容量
private
void
ensurecapacityinternal
(int mincapacity)
// 如果 mincapacity大於陣列長度則進行擴容
private
void
ensureexplicitcapacity
(int mincapacity)
/** * 可分配的陣列最大長度
* */
private
static
final
int max_array_size = integer.max_value -8;
/** * 擴容操作,新的陣列容量newcapacity增加為原來的1.5倍,若newcapacity小於mincapacity,則選擇
* mincapacity作為擴容值
*/private
void
grow
(int mincapacity)
/**
* 大陣列擴容
remove方法
public e remove
(int index)
在remove
方法中使用了system.arraycopy
將後面的陣列元素進行拷貝。system.arraycopy(elementdata, index+1, elementdata, index,nummoved)
第乙個引數表示源陣列,第二個引數srcpos代表要複製的起始位置,第三個引數表示目的陣列,第四個引數destpos代表目的陣列放置的起始位置,最後乙個引數代表需要複製的長度
public
static
void
arraycopy
(object src,
int srcpos,
object dest,
int destpos,
int length)
ArrayList的remove 方法原始碼解讀
remove index public boolean remove object obj else return false arraylist的remove object obj 方法判斷是否為同乙個物件的時候用的是equals方法,如果我們要移除list中的自定義類的時候需要重寫equals方...
mybatis getMapper()方法原始碼解析
public class type,sqlsession sqlsession trycatch exception e override public object invoke object proxy,method method,object args throws throwable els...
JDK1 8 ArrayList擴容機制原始碼分析
屬性 預設長度 private static final int default capacity 10 空陣列 有參構造器 private static final object empty elementdata 空陣列 無參構造器 private static final object def...