//設定初始容量
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...