ArrayList的基本工作原理詳解add

2021-08-20 08:12:21 字數 1258 閱讀 9996

/**

* 預設初始容量空間為10

*/private

static

final

int default_capacity = 10;

/*** 空的object陣列

*/private

static

final object empty_elementdata = {};

/*** add儲存的陣列

*/private

transient object elementdata;

首先來說例項化 

arraylist(int initialcapacity); 

例項化可以直接給出陣列的長度,雖然陣列可以自己擴容,但是擴容需要過程的空間複雜度應該是o(2n)因為需要拷貝乙個次舊的陣列。這個在後面會提到。所以當確定陣列大小的時候,比如或limit確定了取多少資料,那麼請直接給list固定的長度。 

如果用下面的夠早進行例項化,那麼初始的底層陣列是乙個null,是沒有長度的。

public

arraylist()

接著看 add(),第一步先做了增量的變化

public

boolean

add(e e)

然後進入ensurecapacityinternal()方法

private

void

ensurecapacityinternal(int mincapacity)

//此時mincapacity = 10傳入ensureexplicitcapacity()

ensureexplicitcapacity(mincapacity);

}

再看ensureexplicitcapacity()方法

private

void

ensureexplicitcapacity(int mincapacity)

進入grow();

private

static

final

int max_array_size = integer.max_value - 8;

private

void

grow(int mincapacity)

雖然list是乙個可變陣列,但是可變是付出了空間的代價。所以,根據實際情況去運用。

Java集合中ArrayList的實現原理

arraylist是list介面的可變陣列的實現。每個arraylist例項都有乙個容量,該容量是指用來儲存列表元素的陣列的大小。隨著向arraylist中不斷新增元素,其容量也自動增長。自動增長會帶來資料向新陣列的重新拷貝,在新增大量元素前,應用程式也可以使用ensurecapacity操作來增加...

uWSGI django nginx的工作原理流程

wsgi 一種實現python解析的通用介面標準 協議,是一種通用的介面標準或者介面協議,實現了python web程式與伺服器之間互動的通用性。利用它,web.py或bottle或者django等等的python web開發框架,就可以輕鬆地部署在不同的web server上了 uwsgi 同ws...

Write Ahead Log(WAL)的工作原理

在儲存系統的執行過程中,每時每刻都發生著資料的更新,背後意味著諸如建立,刪除,修改檔案等資料的操作。拋開物理檔案資料的改變,對於中心控制節點而言,這些都會涉及到元資料的更新操作。而為了保持系統元資料和物理資料間的狀態一致性,系統所有的資料操作對應的元資料變更都需要持久化到元資料db內,但其實這裡有乙...