ArrayLIst的自增長原理

2021-08-20 17:10:02 字數 1888 閱讀 6034

構造方法 三種

//如果已知容量, 則呼叫這個構造方法,可以獲得指定容量的 陣列

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

}

//構造空的資料即容量為0

public arraylist()

//構造 將乙個集合中的所有元素新增到arraylst中,新增順序是iterator返回的順序

如果集合為空,則報空指標

public arraylist(collection<? extends e> c)  else 

}

arraylist的自動增長

//新增元素,在新增元素會自動增長 具體增長情況 向下看:

public boolean add(e e)

首先會呼叫它: 作用為://先判斷 是否為空,如果為空,則挑選 預設的10 ,和傳進來的引數比較大小,取最大值,然後執行ensrueexpliciticapacity函式,具體看下面:

private void ensurecapacityinternal(int mincapacity) 

ensureexplicitcapacity(mincapacity);

}

//modcount 為結構性修改的次數 與 後面的迭代器有關

每次add 一次,或remove 或addall 等等一次

modcount 都會+1

//然後判斷 ,如果 引數的值 小於 當前陣列的長度,則不做任何操作

如果 引數的值 大於當前陣列長度,則執行grow操作

private void ensureexplicitcapacity(int mincapacity)

//grow 如果是第一此呼叫,則會擴充套件10 如果不是第一次呼叫,則 會增長一半 即是以前陣列長度的2分之三.

如果增長後的長度大於int的(最大值-8)則執行hugecapacity

private void grow(int mincapacity)

即 判斷 實際傳過來的值是否大於int的(最大值-8),如果大於則用最大值,如果不大於則用int的(最大值-8)

private static int hugecapacity(int mincapacity)

總的來說 arraylist的 自動增長情況概述:

當用無參構造方法情況下,第一次新增元素,則會呼叫

ensurecapacityinternal

來判斷是否第一次新增元素,如果是則預設增長的數值為

10,然後執行

ensureexplicitcapacity

(不是第一次新增也會執行),該陣列的結構性修改次數

+1,然後判斷

是否需要陣列的長度大於資料當前的長度,如果是則執行

grow

增長以前的一半(除了第一次增長,第一次增長就是預設

10)(也要除了最後一次增長,意思是增長一半如果大於(最大值-8)

則另行執行另乙個

hugecapacity

函式,再判斷你需要的長度

是否大於(最大值

-8),如果大於則用

int的最大值,如果不大於則用(最大值

-8)),如果不是則不增長。

-------------------------第一次寫,有點亂,見諒-----------------------------

mysql 去除列的自增長 mysql自增長列

自增長列必須是索引列,否則無法建立成功表,對myisma和innodb都一樣 localhost testdb root create table test5 id int auto increment,name varchar 10 engine innodb error 1075 42000 l...

Oracle 的 自增長

oracle的自增長與mysql 的自增長不同,mysql使用其關鍵字auto increment實現自增長,而oracle中沒有改關鍵字,所以要使oracle中表自增長,可以使用序列實現該效果。如下所述 1 建立表user create table user id number 2 not nul...

oracle的自增長

mysql的自增長非常容易,乙個 auto increment 就搞定,可是oracle就不行了 下面是oracle的自增長 建立乙個表 create table t test departments id number 10 not null,description varchar2 50 not...