ArrayList原始碼詳解

2021-10-10 15:47:45 字數 3120 閱讀 9300

arraylist是我們日常寫**常用的集合之一,本文就 結合原始碼來介紹arraylist常用方法

/**

* 預設初始化容量

*/private

static

final

int default_capacity =10;

/** * 空例項陣列

*/private

static

final object[

] empty_elementdata =

;/**

* 預設大小的空陣列例項,在第一次進入ensurecapacityinternal()方法時,會初始化長度為10

*/private

static

final object[

] defaultcapacity_empty_elementdata =

;/**

* 存放元素的陣列

*/transient object[

] elementdata;

// non-private to simplify nested class access

/** * 陣列元素的數量

*/private

int size;

/**

* 帶容量引數的構造方法

* @param initialcapacity 初始容量大小

*/public

arraylist

(int initialcapacity)

else

if(initialcapacity ==0)

else

}/**

* 不帶容量引數的構造方法,使用預設大小的空例項陣列

*/public

arraylist()

/**

* 從陣列中返回當前下標的元素

* @param index

* @return

*/@suppresswarnings

("unchecked"

) e elementdata

(int index)

/** * set方法,將元素設定到集合中

* @param index 要設定到的下標

* @param element 要設定的元素

* @return

*/public e set

(int index, e element)

/**

* 獲取當前下標的元素

* @param index

* @return

*/public e get

(int index)

/**

* 在指定index插入元素

* @param index

* @param element

*/public

void

add(

int index, e element)

/** * 為當前集合新增乙個元素

* @param e

* @return

*/public

boolean

add(e e)

/** * 賦初始值以及校驗是否需要擴容

* @param mincapacity

*/private

void

ensurecapacityinternal

(int mincapacity)

//判斷新增元素後是否需要擴容

ensureexplicitcapacity

(mincapacity);}

private

void

ensureexplicitcapacity

(int mincapacity)

/** * 陣列允許的最大長度

*/private

static

final

int max_array_size = integer.max_value -8;

/** * 陣列擴容方法

* @param mincapacity

*/private

void

grow

(int mincapacity)

/**

* 通過下標刪除元素

* @param index

* @return

*/public e remove

(int index)

/** * 如果當前集合中存在乙個與傳入的引數相同的元素,則刪除匹配到的第乙個

* 否則不變

* @param o

* @return

*/public

boolean

remove

(object o)

}else

}return

false;}

/** * 私有方法供上面的remove方法使用

*/private

void

fastremove

(int index)

/**

* 將集合中的元素全部刪除,當前元素置為空

*/public

void

clear()

1、arraylist的底層是動態陣列實現的,linkedlist是基於鍊錶實現的。

2、對於隨機訪問(get/set方法),arraylist是通過下標直接定位到陣列對應位置的節點,而linkedlist需要從頭結點或尾結點開始遍歷,直到找到目標結點。因此效率上arraylist是要高於linkedlist的。

3、對於插入刪除(add\remove方法),arraylist需要移動目標結點後面的結點(通過system.arraycopy方法移動節點),而linkedlist只需要改變目標結點的前後節點的next或prev屬性即可。因此在效率上,linkedlist要高於arraylist。

ArrayList原始碼詳解

成員變數的宣告 成員變數的宣告 private static final object empty elementdata transient object elementdata 儲存元素的陣列 private static final int default capacity 10 構造方法初始...

ArrayList原始碼詳解

成員變數 private static final int default capacity 10 private static final object empty elementdata transient object elementdata private int size default ...

ArrayList 原始碼詳解

arraylist 繼承 abstractlist 抽象類 是list 的子類 預設 陣列大小是 10個 private static final int default capacity 10 private static final object empty elementdata privat...