實際是維護了乙個object型別的陣列(transientobject elementdata)
transient表示瞬時,表示該屬性不會被序列化
建立arraylist時,呼叫無參構造時
初始elementdata容量為0,第一次新增時,擴容至10
如果需要再次擴容時,則擴容為1.5倍
建立arraylist時,呼叫指定大小的構造器時
初始elementdata容量為指定大小
如果需要再次擴容時,則擴容為1.5倍
無參構造
public arraylist() ;
// 建立了乙個空的elementdata
this.elementdata = defaultcapacity_empty_elementdata;
}
說明第一次初始化時容量為0
新增方法add()
public boolean add(e e)
確認容量ensurecapacityinternal()protected transient int modcount = 0;
private static final int default_capacity = 10;
private static final object defaultcapacity_empty_elementdata = {};
// ensurecapacityinternal()
// 此時引數為size + 1
private void ensurecapacityinternal(int mincapacity)
// calculatecapacity()
// 用於確定乙個mincapacity
private static int calculatecapacity(object elementdata, int mincapacity)
// mincapacity>10時,返回的是mincapacity
return mincapacity;
}// ensureexplicitcapacity()
// 此時mincapacity為calculatecapacity()返回值
// size+1<10時,返回的是10
// size+1>10時,返回的是size+1
private void ensureexplicitcapacity(int mincapacity)
// grow()
private void grow(int mincapacity)
// grow()結束到:
// ensureexplicitcapacity()結束到:
// ensurecapacityinternal()結束到add():
public boolean add(e e)
// add()結束
有參構造public arraylist(int initialcapacity) else if (initialcapacity == 0) ;
// 賦值空陣列
this.elementdata = empty_elementdata;
} else
}
add()public boolean add(e e)
不同在擴容的判斷
private void ensurecapacityinternal(int mincapacity)
// calculatecapacity()
// 用於確定乙個mincapacity
private static int calculatecapacity(object elementdata, int mincapacity)
// 返回的是size+1
return mincapacity;
}// ensureexplicitcapacity()
// 此時mincapacity為calculatecapacity()返回值
// 返回的是size+1
private void ensureexplicitcapacity(int mincapacity)
// grow()
private void grow(int mincapacity)
// grow()結束到:
// ensureexplicitcapacity()結束到:
// ensurecapacityinternal()結束到add():
public boolean add(e e)
// add()結束
Arraylist原始碼分析擴容
成員變數 序列化id private static final long serialversionuid 8683452581122892189l 預設初始化容量 private static final int default capacity 10 空的陣列 private static fi...
原始碼學習 ArrayList的擴容原始碼分析
原始碼如下 下面是arraylist的擴容機制 arraylist的擴容機制提高了效能,如果每次只擴充乙個,那麼頻繁的插入會導致頻繁的拷貝,降低效能,而arraylist的擴容機制避免了這種情況。如有必要,增加此arraylist例項的容量,以確保它至少能容納元素的數量 param mincapac...
ArrayList 擴容機制原始碼分析
本篇通過閱讀jdk1.8原始碼,了解arraylist是如何進行自動擴容的。初始化無參構造方法建立arraylist arraylist arraylist new arraylist 原始碼 private static final object defaultcapacity empty ele...