當建立乙個arraylist物件時可以不傳引數,arraylist會自己初始化乙個預設 size,
private static final int default_capacity = 10;
當呼叫該物件中add()時會先將判斷自己陣列大小(盡量自己估算乙個與自己專案儲存的資料大小相差不大的值,避免多次擴容),
public boolean add(e e)
確定陣列大小容量,傳入陣列容量大小進行比較,會呼叫其中ensurecapacityinternal();
private void ensurecapacityinternal(int mincapacity)
ensureexplicitcapacity(mincapacity);
}
此方法是判斷傳入的容量大小是否小於預設的容量大小。
如果小於就將其設定為初始容量
如果大於呼叫ensureexplicitcapacit
y();
private void ensureexplicitcapacity(int mincapacity)
當呼叫grow方法時才是真正意義上的擴容
private void grow(int mincapacity)
從這個**上看,newcapacity是oldcapacity的1.5倍,然後將資料進行copy。
**中的hugecapacity方法,目前不知道會起到什麼作用,感覺無傷大雅,可有可無的一種方法,為什麼這麼說,看看**。
private static int hugecapacity(int mincapacity)
其中說的是當資料大於int最大值時(20多億),會呼叫該方法,呼叫該方法會給陣列再加上8個資料。所以我感覺就是可有可無的(個人看法)。
ArrayList動態擴容機制
初始化 有三種方式預設的構造器,將會以預設的大小來初始化內部的陣列 public arraylist 用乙個icollection物件來構造,並將該集合的元素新增到arraylist public arraylist collection c 用指定的大小來初始化內部的陣列 public array...
Arraylist動態擴容詳解
arraylist是基於陣列實現的,是乙個動態陣列,其容量能自動增長。arraylist不是執行緒安全的,只能用在單執行緒環境下。實現了serializable介面,因此它支援序列化,能夠通過序列化傳輸 實現了randomaccess介面,支援快速隨機訪問,實際上就是通過下標序號進行快速訪問 實現了...
ArrayList的動態擴容
arraylist可以實現容量的自適應的增加,通過閱讀源 對這個機制進行一下簡單的分析。首先,arraylist有乙個初始的預設大小,為10.private static final int default capacity 10 從add方法為入口 public boolean add e e 可...