ArrayList 概述 與原始碼簡析

2021-08-17 02:37:53 字數 2451 閱讀 3550

1 arraylist 建立

arraylistlist =

newarraylist<>();

//構造乙個初始容量為10 的空列表

private

static

final

object defaultcapacity_empty_elementdata = {};

public

arraylist

() 2 arraylist 新增資料

"afd"

); "afd"

); "afd"

); //[afd, afd, afd]

/** 0,

"qq"

); //[qq, afd, afd, afd]

而最終是通過 arrays.copyof(elementdata, newcapacity)這個方法將原來集合中的內容copy到新的集合中去

public

void

add(

intindex, e element)

newarraylist();

1);

newarraylist();

3);

//將 arraylist2 中的資料全部新增到arraylist3集合中

//[3, 1]

最終是通過 system.arraycopy()方法 資料copy到了乙個新的陣列中

public

boolean

addall

(collection<? extends e> c)

3 arraylist 移除集合中的所有的資料

newarraylist();

//新增資料

"afd"

); "afd"

); "afd"

); //[afd, afd, afd]

//移除集合中的所有的資料

//public

void

clear

() 4 arraylist 判斷是否包含指定的元素

newarraylist();

//新增資料

"afd"

); "afd"

); "afd"

); //判斷 集合中是否包含指定的元素 ,飽含返回true ,不包含返回false

boolean

contains = arraylist.contains(

"afd"

); //true

boolean

contains

(object o)

5 arraylist 判斷列表中是否有元素(是否不為空)

boolean

empty = arraylist.isempty();

//這裡的size 是集合對應的儲存資料的內容陣列的大小

public

boolean

isempty()

6 arraylist 移除元素

newarraylist();

//新增資料

"afd"

); "abc"

); "axc"

); //方式一 移除0角標的資料

0);

//[abc, axc]

//方式二 移除資料 "axc"

"axc"

); //[abc]

e remove

(int

index)

boolean

remove

(object o)

else

} return

false

; }

這是兩個過載的方法 remove(int

index) 是根據傳入的角標,根據角標去除對應的資料,最後還是通過system.arraycopy方法來重建新的陣列

remove(object o) 是直接移除元素的方法,元素有可能為 null,所以這裡有了乙個判斷 ,最終都是通過 fastremove(index);方法中的system.arraycopy邏輯來建立新的陣列的

7 arraylist 修改資料

newarraylist();

//新增資料

for(

inti =

0; i <

14; i++)

void

rangecheck

(int

index) {

if(index >= size)

throw

newindexoutofbound***ception(outofboundsmsg(index));

然後通過elementdata(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...