ArrayList原始碼解析

2021-08-17 09:42:53 字數 1247 閱讀 2805

new arraylist()

public

arraylist()

public

arraylist(int initialcapacity) else

if (initialcapacity == 0) else

}

private

static

final object defaultcapacity_empty_elementdata = {};

下面都按new arraylist()分析**

add(e e)

public

boolean

add(e e)

ensurecapacityinternal()

private

void

ensurecapacityinternal(int mincapacity)

*/if (elementdata == defaultcapacity_empty_elementdata)

/*** 擴容

*/ensureexplicitcapacity(mincapacity);

}

ensureexplicitcapacity()

private

void

ensureexplicitcapacity(int mincapacity)

grow()

private

void

grow(int mincapacity)

private

static

inthugecapacity(int mincapacity)

由這段**可知,當size=max_array_size/integer.max_value,再增加資料就越界了。

public e remove(int index)
還有public boolean remove(object o)方法,和上面的remove基本相同,只是不返回原值。

擴容會開闢新空間,並copy原值到新空間中;刪除涉及到資料的移動;這兩者都比較耗效能,最好是宣告恰當的資料長度。如果程式中不能用下標定位資料,或刪除較頻繁時,可以考慮使用linkedlist。

ArrayList原始碼解析

arraylist內部的結構採用的是陣列。transient object elementdata non private to simplify nested class access當我們使用預設建構函式的時候,如下 private static final object defaultcapa...

ArrayList 原始碼解析

從日常 看arraylist的執行流程 第一步 我們初始化乙個 arraylist 然後新增乙個元素,如下 public class arraylisttest arraylist的建構函式和方法有三個,乙個是帶有初始大小的arraylist,乙個傳入collection,另外乙個空參。我們呼叫空參...

ArrayList 原始碼解析

一,arraylist是什麼?可以用來幹什麼?arraylist就是陣列列表,主要用來裝載資料,當我們裝載的是基本型別的資料int,long,boolean,short,byte 的時候我們只能儲存他們對應的包裝類,它的主要底層實現是陣列object elementdata。與它類似的是linked...