建構函式:有3個建構函式
1)在jdk原始碼中arraylist無參的建構函式,預設初始化大小是10;
2)帶有指定大小引數的建構函式
3)帶有集合引數的建構函式
一、確定arrarlist的容量
1、若arraylist的容量不足以容納當前的全部元素,設定新的容量 = (原始容量 * 3) / 2 + 1。
2、如果擴容後容量還是不夠,則直接將mincapacity設定為當前容量。
public
void
ensurecapacity(int mincapacity)
}
二、新增元素
public
boolean
add(e e)
將element新增到arraylist的指定位置
public
void add(int
index, e element)
三、獲取index位置的元素值
public e get(int
index)
四、設定index位置的值為element
public e set(int
index, e element)
五、刪除arraylist指定位置的元素
public e remove(int
index)
刪除元素
public
boolean remove(object o)
} else
}return
false;
}
private
void fastremove(int
index)
六、arraylist是否包含object(o)
public
boolean
contains(object o)
正向查詢,返回元素的索引值
public
intindexof(object o) else
return -1;
}}
七、返回arraylist的object陣列
public object toarray()
八、將集合c追加到arraylist中
public
boolean
addall(collection<? extends e> c)
分析arraylist原始碼比較重要的幾點總結:
1、arraylist是如何確定容量的—->呼叫ensurecapacity方法。
2、arraylist是基於陣列的,所以獲取元素和設定元素都是這樣的形式:elementdata[index],只需獲取到陣列索引就可以了。
3、在arraylist原始碼中,大量使用了system.arraycopy(object src, int srcpos, object dest, int destpos, int length)
src:源陣列; srcpos:源陣列要複製的起始位置; dest:目的陣列; destpos:目的陣列放置的起始位置; length:複製的長度。
比如arraylist的增加、刪除、將集合c追加到arraylist中這三種操作,都使用了這個方法。
4、arrays類的靜態方法:copyof(t original, int newlength)
original - 要複製的陣列 ; newlength - 要返回的副本的長度 ; newtype - 要返回的副本的型別
比如arraylist的toarray()方法就使用了arrays.copyof方法。
ArrayList集合原始碼剖析
public boolean add e e public e set int index,e element public void add int index,e element 結果為elementdata 執行elementdata index mazi 步驟為elementdata 1 m...
JDK1 8 ArrayList原始碼剖析(二)
jdk1.8中新增的特性 1.void foreach consumer super e action jdk8中新特性,對list中每個元素分別進行操作,如 arraylistal new arraylist al.add 0 al.add 1 al.add 2 al.add 3 al.forea...
原始碼剖析 Hashtable 原始碼剖析
hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...