ArrayList 特點 原始碼分析記錄

2021-09-27 00:24:33 字數 1694 閱讀 5629

包含內容

特點增刪改查原始碼分析 特點

按照插入順序來儲存元素,可以利用下標來查詢值

按照下標訪問元素最快o(1)

在中間插入元素很慢 & 刪除元素很慢

允許資料null

執行緒不安全

底層是陣列,預設陣列長度為10,擴容先進行1.5倍擴容,不夠直接使用需要長度為容量

####1. 構造方法

public arraylist(int initialcapacity)  else if (initialcapacity == 0)  else 

}public arraylist()

// 把另乙個集合轉成陣列初始化陣列

public arraylist(collection<? extends e> c) else

}

####2. 增

public boolean add(e e) 

public void add(int index, e element)

public boolean addall(collection<? extends e> c)

2.1 擴容
private void ensurecapacityinternal(int mincapacity) 

private void ensureexplicitcapacity(int mincapacity)

private void grow(int mincapacity)

2.2 檢測是否越界
private void rangecheckforadd(int index)
2.3 新增資料後,資料位置向後移動
public static void arraycopy(object src, int srcpos, object dest, int destpos, int length)
方法解釋 : 複製指定的源陣列的陣列,在指定的位置開始,到目標陣列的指定位置

引數解釋:

object src : 原陣列

int srcpos : 從元資料的起始位置開始

object dest : 目標陣列

int destpos : 目標陣列的開始起始位置

int length : 要copy的陣列的長度

// 把elementdata陣列從index開始複製到elementdata陣列index+1位置,複製的資料長度為size - index , 所以下標index就空出來了 , 為後面賦值做準備

system.arraycopy(elementdata, index, elementdata, index + 1,size - index);

3. 刪除
public e remove(int index) 

public boolean remove(object o)

} else

}return false;

}private void fastremove(int index)

4. 改
public e set(int index, e element)
5. 查
public e get(int index)

ArrayList原始碼分析

arraylist是平時使用很多的乙個類,趁有時間,我也閱讀以下原始碼,以幫助自己加深理解。類的層次結構這裡就不列出了,主要分析一下原始碼部分,屬性部分 protected transient int modcount 0 這個屬性是從abstractlist繼承過來的,每次arraylist進行結...

ArrayList原始碼剖析

建構函式 有3個建構函式 1 在jdk原始碼中arraylist無參的建構函式,預設初始化大小是10 2 帶有指定大小引數的建構函式 3 帶有集合引數的建構函式 一 確定arrarlist的容量 1 若arraylist的容量不足以容納當前的全部元素,設定新的容量 原始容量 3 2 1。2 如果擴容...

ArrayList原始碼理解

與linkedlist原始碼理解放在一起查閱,效果更好 對隊成員變數的分析,可以知道arraylist的資料結構 對add 方法的分析,可以得知arraylist新增資料的效率不高 對get 方法的分析,可以看出arraylist查詢的效率非常高 對remove 方法的分析,可以了解到arrayli...