JDK1 8 ArrayList原始碼分析

2021-10-23 20:38:12 字數 3288 閱讀 6776

//設定初始容量 

private

static

final

int default_capacity =10;

//空例項陣列

private

static

final object[

] empty_elementdata =

;/** 預設大小的空例項陣列,在第一次呼叫ensurecapacityinternal方法中的

* calculatecapacity方法時會初始化長度為10,之後呼叫grow()擴容方法將陣列長度擴容為10。

*/private

static

final object[

] defaultcapacity_empty_elementdata =

;/**

* 存放元素的陣列

* defaultcapacity_empty_elementdata,當新增第乙個元素時,將擴充套件為default_capacity。

*/transient object[

] elementdata;

// 包含元素的總數

private

int size;

/** * 帶容量的構造方法

*/public

arraylist

(int initialcapacity)

else

if(initialcapacity ==0)

else

}/**

* 不帶容量引數則使用預設大小的空例項陣列

1、設定初始容量為10

2、空例項陣列empty_elementdata

3、預設大小的空例項陣列,在第一次呼叫ensurecapacityinternal方法中的calculatecapacity方法時會初始化長度為10,之後呼叫grow()擴容方法將陣列長度擴容為10。

4、elementdata,存放元素的陣列

@suppresswarnings

("unchecked"

) e elementdata

(int index)

/** * 先檢查索引有沒有越界,再更具下標取資料

*/public e get

(int index)

1、根據陣列的索引獲取元素

/**

* 1、先檢查索引有沒有越界

* 2、建乙個變數儲存老元素

* 3、新元素替換老元素

* 4、把老元素返回回去

*/public e set

(int index, e element)

1、先檢查索引有沒有越界

2、建乙個變數儲存老元素

3、新元素替換老元素

4、把老元素返回回去

public

boolean

add(e e)

/*** 在指定位置插入指定的元素,移動當前位於該位置的元素(如果有)

* 將index位置及後面的所有元素(如果有的話)向右移動乙個位置

*/public

void

add(

int index, e element)

/*** 確保內部容量

* mincapacity:最小容量(當前陣列長度加1)

* 1.如果沒初始化則進行初始化;

* 2.校驗新增元素後是否需要擴容。

*/private

void

ensurecapacityinternal

(int mincapacity)

/*** 計算容量

*/private

static

intcalculatecapacity

(object[

] elementdata,

int mincapacity)

return mincapacity;

}/**

* 確保許可容量

1、 在指定位置插入指定的元素,移動當前位於該位置的元素(如果有),將index位置及後面的所有元素(如果有的話)向右移動乙個位置

1、將index+1位置及之後的所有元素,向左移動乙個位置

2、將size-1,並將size-1位置的元素賦值為空,因為上面將元素左移了,所以size-1位置的元素為重複的,將其移除

public

boolean

remove

(object o)

}else

}return

false;}

/*** 私有的快速移除的方法

*/private

void

fastremove

(int index)

1、找到指定的元素

2、將陣列從index+1的位置向左移動一格

3、將陣列的size-1的位置設定為null

public

void

clear()

遍歷陣列,把所以元素清空

arraylist原始碼(jdk 1.8)

JDK1 8 ArrayList擴容機制原始碼分析

屬性 預設長度 private static final int default capacity 10 空陣列 有參構造器 private static final object empty elementdata 空陣列 無參構造器 private static final object def...

JDK1 8 ArrayList 擴容詳解

arraylist這個資料結構比較簡單,總體來說,arraylist 底層結構是陣列,他的很多方法都是從陣列上面演變而來的,下面分析下arraylist的擴容機制,每次在add 乙個元素時,arraylist都需要對這個list的容量進行乙個判斷。如果容量夠,直接新增,否則需要進行擴容。在1.8 a...

JDK1 8 ArrayList原始碼剖析(二)

jdk1.8中新增的特性 1.void foreach consumer super e action jdk8中新特性,對list中每個元素分別進行操作,如 arraylistal new arraylist al.add 0 al.add 1 al.add 2 al.add 3 al.forea...