關於arrayList的add和addall

2021-10-01 17:54:13 字數 664 閱讀 7759

花了一周時間,重構了系統中最重要的一段下發列印邏輯的**,理清了各型別間的呼叫關係,得意之際,測試告訴**資料異常了,花了5個小時的測試,終於發現了問題,用錯了arraylist的addall方法,下面列舉下add和addall方法。

arraylist是乙個實現可變長陣列,繼承abstractlist類,實現所有的list介面,還實現了randomaccess、cloneable、serializable介面。

add源**:

public boolean add(e e)
addall源**:

//將collection c內的資料插入arraylist中

public boolean addall(collection<? extends e> c)

//將collection c中的資料插入到arraylist的指定位置

public boolean addall(int index, collection<? extends e> c)

可以看出,add是將傳入的引數作為當前list中的乙個item儲存,即使你傳入乙個list也只會另當前的list增加1個元素,而addall是傳入乙個list,將此list中的所有元素加入到當前list中,也就是當前list會增加的元素個數為傳入的list的大小

關於arrayList的add和addall

如果連線2個arraylist,比如a和b,如果直接寫a.addall b 有可能連線不上,最常見的方法是定義乙個新的arraylist c,再c.addall a 和c.addall b arraylist是乙個實現可變長陣列,繼承abstractlist類,實現所有的list介面,還實現了ran...

關於ArrayList的天坑

arraylist中的每乙個元素儲存的實際上是物件引用 之前在公司寫 的時候,做過類似下面的事 假如按照下面的方式使用arraylist,則最後list中儲存的元素都相同且都是最後乙個元素,原因是list中所有的元素都指向同一塊記憶體。test public void test1 system.ou...

關於arraylist的擴容機制

arraylist會自動改變size的長度 首先,arraylist定義了乙個私有的未被序列化的陣列elementdata,用來儲存arraylist的物件列表 注意只定義未初始 private transient object elementdata 其次,以指定初始容量 capacity 或把指...