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...