ArrayList動態陣列 擴容機制

2021-10-11 01:29:24 字數 1001 閱讀 7307

當建立乙個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 可...