簡單理解ArrayList原始碼

2021-10-03 23:40:21 字數 1549 閱讀 8673

1.arraylist是動態擴容的,每次擴容為原來長度的1.5倍,並且採用的是懶載入策略,當第一次呼叫add方法時,陣列才會擴容為10(預設值)

2.模擬實現

list介面:

public

inte***ce

list

自己實現的myarraylist在構造方法中陣列就初始化大小為10,原始碼中在第一次呼叫add()時大小才擴容為10(原始碼中是在構造方法中陣列引用定義好的預設長度為0的陣列);

public

class

myarraylist

implements

list

@override

public

intsize()

@override

public

void

add(e e)

@override

public e get

(int index)

@override

public e set

(int index, e e)

@override

public

boolean

remove

(int index)

*/ system.

arraycopy

(elementdata,index+

1,elementdata,index,size-index-1)

; elementdata[

--size]

= null;

return

true;}

//動態擴容

private

void

ensurecapacity

(int mincap)

}private

void

group

(int mincap)

if(newcap -

(integer.max_value -8)

>0)

elementdata = arrays.

copyof

(elementdata, newcap);}

//檢查下標是否越界

private

void

rangecheck

(int index)

}//將object型別的元素轉為e

@suppresswarnings

("unchecked"

)private e elementdata

(int index)

@override

public string tostring()

}

測試

public

class

test

}

ArrayList的remove 方法原始碼解讀

remove index public boolean remove object obj else return false arraylist的remove object obj 方法判斷是否為同乙個物件的時候用的是equals方法,如果我們要移除list中的自定義類的時候需要重寫equals方...

JDK1 8 ArrayList擴容機制原始碼分析

屬性 預設長度 private static final int default capacity 10 空陣列 有參構造器 private static final object empty elementdata 空陣列 無參構造器 private static final object def...

ArrayList 內部實現簡單理解

arraylist是基於陣列的,內部是用 object實現的 當new 乙個空參 arraylist 的時候,系統生成乙個長度為0的object陣列。當new乙個有參的arraylist的時候,該值作為陣列的長度值。如果該值小於 0,則丟擲乙個執行時異常。如果等於 0,則使用乙個空陣列,如果大於 0...