3.總結
建構函式原始碼
。
private static final int default_capacity = 10;//預設容量大小
private static final object defaultcapacity_empty_elementdata = {};//空陣列
/***1.預設建構函式,使用初始容量10構造乙個空列表(無引數構造)
*/public arraylist()
/*** 2.帶初始容量引數的建構函式。(使用者自己指定容量)
*/public arraylist(int initialcapacity) else if (initialcapacity == 0) else
}/**
*3.*構造包含指定collection元素的列表,這些元素利用該集合的迭代器按順序返回
*如果指定的集合為null,throws nullpointerexception。
*/public arraylist(collection<? extends e> c) else
}
當無引數構造方法呼叫的時候,是建立乙個空陣列,加入第乙個資料的時候才會進行擴容。
將元素新增到尾端
public boolean add(e e)
得到最小擴容量
private void ensurecapacityinternal(int mincapacity)
ensureexplicitcapacity(mincapacity);//判斷是否需要擴容
}
判斷是否需要擴容
private void ensureexplicitcapacity(int mincapacity)
當新增第乙個元素時,空陣列0,擴容為10
當新增到第11個時,mincapacity 為11大於第一次擴容後的長度default_capacity(10),開始擴容
開始擴容
//可以分配的最大陣列長度
private static final int max_array_size = integer.max_value - 8;
/*** arraylist擴容的核心方法。
*/private void grow(int mincapacity)
比較mincapacity和max_array_size,確定newcapacity
private static int hugecapacity(int mincapacity)
乙個簡單的判斷。
arraylist的初始是空的陣列,第一次新增資料的時候陣列初始為預設長度10。每一次新增資料的時候,得到最小擴容量,判斷是否需要擴容,擴容的長度為舊容量的1.5倍,在判斷新容量和最大陣列長度,最後完成擴容。
ArrayList擴容機制
1.成員變數 預設給定的初始容量 private static final int default capacity 10 無參構造器中所使用到的空陣列例項 private static final object empty elementdata 有參構造器中所使用到的空陣列例項 private ...
ArrayList擴容機制
arraylist實現了list介面。它是乙個可調整大小的陣列,可以用來存放各種形式的資料。並提供了包括crud在內的多種方法可以對資料進行操作,但是它不是執行緒安全的。list擴容實現步驟總的來說就是分兩步 陣列定義的時候,因為需要給它分配連續的記憶體空間,需要預先指定其大小。因此當存放的資料大於...
ArrayList動態擴容機制
初始化 有三種方式預設的構造器,將會以預設的大小來初始化內部的陣列 public arraylist 用乙個icollection物件來構造,並將該集合的元素新增到arraylist public arraylist collection c 用指定的大小來初始化內部的陣列 public array...