ArrayList原始碼解析

2022-07-03 22:18:14 字數 1718 閱讀 5661

add操作:

private

transient

object elementdata;

private

static

final

int default_capacity = 10;

public

arraylist()

public arraylist(int

initialcapacity)

public

boolean

add(e e)

private

void ensurecapacityinternal(int

mincapacity)

ensureexplicitcapacity(mincapacity);

}private

void ensureexplicitcapacity(int

mincapacity)

private

void grow(int

mincapacity)

總結:elementdata 是arraylist的中間陣列,是實際資料的存放陣列,size是陣列實際的長度,elementdata.length都是大於或者等於size的。

宣告arraylist陣列時如果指定長度後向陣列中新增元素,如果長度超出了arraylist中間陣列的長度(elementdata.length)則會增加陣列容量(新建乙個更長的陣列),增加原長度的一半容量,然後將原資料拷貝到新陣列中

如果宣告arraylist陣列時沒有指定長度,則預設是空陣列,在新增元素的時候,判斷如果當前集合(中間陣列)為空,則將預設長度10賦給陣列,即新增第乙個元素後的陣列容量實際是10

刪除(remove)操作:

remove(int index)刪除指定位置上的元素

public e remove(int

index)

總結:刪除指定位置上的元素是將該陣列中該位置以後的元素都往前移動一位,最後一位置null被**

remove(object o)刪除此列表中首次出現的指定元素

public

boolean

remove(object o)

} else

}return

false

; }

//此方法和remove類似

private

void fastremove(int

index)

總結:移除時先判斷是否是null,如果是要單獨操作,因為null沒有equals方法,通過逐個比較元素來判斷要溢位的元素的位置,再通過類似於remove的方法移除元素

修改/設定(set)操作

set(int

index, e element)用指定的元素替代此列表中指定位置上的元素。

public e set(int

index, e element)

總結:直接將指定位置上的元素賦給要賦的值

查詢/獲取(get)操作:

public e get(int

index)

總結:直接返回指定位置上的陣列元素

ArrayList原始碼解析

new arraylist public arraylist public arraylist int initialcapacity else if initialcapacity 0 else private static final object defaultcapacity empty e...

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,另外乙個空參。我們呼叫空參...