ArrayList擴容機制實現原理(原始碼分析)

2021-10-08 10:30:04 字數 1543 閱讀 2987

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...