/**
* 預設初始容量空間為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內,但其實這裡有乙...