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