ArrayList原始碼詳解

2021-10-01 04:51:30 字數 1988 閱讀 4699

成員變數

private

static

final

int default_capacity =10;

private

static

final object[

] empty_elementdata =

;transient object[

] elementdata;

private

int size;

default_capacity為預設陣列大小

elementdata:最主要成員變數,乙個陣列

size:陣列中存放引用物件個數,不是陣列長度,故用size而不是length

建構函式

public

arraylist

(int initialcapacity)

else

if(initialcapacity ==0)

else

}public

arraylist()

由建構函式可知,arraylist由陣列實現,主要對elementdata進行操作。初始化有兩種方式,一種自己指定陣列初始化長度,一種預設長度。當我們大概知道需要存放多少數量時,盡量自己指定長度,避免陣列多次自動擴容降低效率。

1)add方法。新增資料

public

boolean

add(e e)

第一步是判斷陣列是否有容量可以存放資料,若沒有就擴容。

第二步將資料放在陣列末尾,並將size加1。

public

void

add(

int index, e element)

可見要在任意位置插入資料,需要將index後的資料拷貝複製操作,時間複雜度為o(n),效率不高。

2)remove方法。刪除資料

public e remove

(int index)

跟插入資料有些類似,只不過是複製資料前移一位,並將多餘的最後乙個位置賦值為null。同理時間複雜度為o(n),效率不高。

public

boolean

remove

(object o)

}else

}return

false;}

private

void

fastremove

(int index)

需要注意的是:

3)sublist方法。擷取部分list

public list

sublist

(int fromindex,

int toindex)

返回的sublist為單獨定義的乙個實現類

4)toarray方法。將list轉陣列

public object[

]toarray()

5)get和set方法。根據索引獲取和修改資料

public e get

(int index)

public e set

(int index, e element)

vector與arraylist的區別在於vector是執行緒安全的類。它的主要方法上都加上了synchronized關鍵字,其他與arraylist無區別。

但是由於方法上都加上了synchronized關鍵字,故效率不高,故基本棄用。

ArrayList原始碼詳解

成員變數的宣告 成員變數的宣告 private static final object empty elementdata transient object elementdata 儲存元素的陣列 private static final int default capacity 10 構造方法初始...

ArrayList 原始碼詳解

arraylist 繼承 abstractlist 抽象類 是list 的子類 預設 陣列大小是 10個 private static final int default capacity 10 private static final object empty elementdata privat...

ArrayList原始碼詳解

arraylist是我們日常寫 常用的集合之一,本文就 結合原始碼來介紹arraylist常用方法 預設初始化容量 private static final int default capacity 10 空例項陣列 private static final object empty element...