ArrayList原始碼解析

2022-04-07 00:38:03 字數 1277 閱讀 2479

一、簡介:

講解的版本是jdk 1.8。arraylist是基於陣列實現的,是乙個動態陣列,其容量能自動增長,類似於c語言中的動態申請記憶體,動態增長記憶體。arraylist不是執行緒安全的,只能用在單執行緒環境下,多執行緒環境下可以考慮用collections.synchronizedlist(list l)函式返回乙個執行緒安全的arraylist類,也可以使用concurrent並發包下的copyonwritearraylist類。

二、重要成員變數:

transient object elementdata:儲存元素

private int size:當前儲存的元素數量

private static final int default_capacity = 10:預設陣列大小

三、構造方法:

arraylist有三個構造方法,看下最只要的:

1

public arraylist(int

initialcapacity) else

if (initialcapacity == 0) else

10 }

initialcapacity為傳入的初始容量,如果大於0,則建立陣列,否則,使用預設大小為0的陣列;

四、重要的方法:

1.add():

1

public

boolean

add(e e) 89

private

void ensurecapacityinternal(int

mincapacity)

1415

ensureexplicitcapacity(mincapacity);16}

17private

void ensureexplicitcapacity(int

mincapacity)

2526

private

void grow(int

mincapacity)

**關鍵部分都做了注釋,就不在解釋了。

2.get():

1

public e get(int

index)

7private

void rangecheck(int

index)

3.remove(int index):

1

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