ArrayList原始碼分析1 8

2021-09-11 10:35:04 字數 2379 閱讀 3703

一、arraylist屬性:

1、arraylist屬性主要就是當前陣列長度size,以及存放陣列的物件elementdata陣列

public class arraylistextends abstractlistimplements list, randomaccess, cloneable, serializable
二、arraylist建構函式

1、不傳入引數,則使用預設無參構建方法建立arraylist物件

public arraylist()
2、入引數,則代表指定arraylist的初始陣列長度,傳入引數如果是大於等於0,則使用使用者的引數初始化,如果使用者傳入的引數小於0,則丟擲異常

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

}

三、常用方法:

1、add(e e) 方法:

public boolean add(e e)
確保新增的元素有地方儲存,當第一次新增元素的時候this.size+1 的值是1,所以第一次新增的時候會將當前elementdata陣列的長度變為10

private void ensurecapacityinternal(int mincapacity) 

ensureexplicitcapacity(mincapacity);

}

將修改次數(modcount)自增1,判斷是否需要擴充陣列長度,判斷條件就是用當前所需的陣列最小長度與陣列的長度對比,如果大於0,則增長陣列長度

private void ensureexplicitcapacity(int mincapacity)
如果當前的陣列已使用空間(size)加1之後 大於陣列長度,則增大陣列容量,擴大為原來的1.5倍

private void grow(int arg0) 

if (arg2 - 2147483639 > 0)

this.elementdata = arrays.copyof(this.elementdata, arg2);

}

2、add(int index, e element)方法:加元素到陣列中指定位置的時候,要將該位置及其後邊所有的元素都整塊向後複製一位

public void add(int index, e element)
private void rangecheckforadd(int index)
3、get方法:返回指定位置上的元素時,可以通過索引直接獲取(o(1))

public e get(int index)
4、set方法:set的位置小於當前陣列的長度(size)並且大於0,獲取指定位置(index)元素,然後放到oldvalue存放,將需要設定的元素放到指定的位置(index)上,然後將原來位置上的元素oldvalue返回給使用者

public e set(int index, e element)
5、contains方法:遍歷陣列中的每乙個元素作對比,如果找到對於的元素,則返回true,沒有找到則返回false

public boolean contains(object o)
public int indexof(object o)  else 

return -1;

}

6、remove(int)方法:通過索引刪除指定位置上的元素

public e remove(int index)
7、remove(object):arraylist是可以存放null值

public boolean remove(object o) 

} else

}return false;

}

private void fastremove(int index)
總結:

1、arraylist可以存放null

2、arraylist本質上就是乙個elementdata陣列

3、arraylist區別於陣列的地方在於能夠自動擴充套件大小(1.5倍),其中關鍵的方法就是gorw()方法

4、arraylist是陣列的特性,查詢方面會很快,插入刪除射界資料的位置移動效能下降很多

5、arraylist實現了randomaccess,所以在遍歷它的時候推薦使用for迴圈

ArrayList原始碼分析1

所有的分析基於jdk15 arraylist的資料結構是陣列。基於陣列的實現。是執行緒不安全的資料結構。實現了list介面。預設arraylist的容量 private static final int default capacity 10 空陣列例項 private static final o...

ArrayList原始碼分析

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

ArrayList原始碼分析

有參建構函式傳入乙個int public arraylist int capacity 如果為0則返回空陣列,否則new 乙個capacity的陣列 array capacity 0 emptyarray.object new object capacity 無參建構函式 public arrayl...