Java基礎之:List——ArrayList & Vector
ArrayList簡單介紹
ArrayList實現了List接口,底層是一個數組,并實現了可變的功能。底層屬性(transient Object[] elementData;)在序列化時,忽略該屬性。
ArrayList實現了List接口,所以它可以允許出現重復值,也可以使用List中的所有方法。
ArrayList與Vector基本相同,ArrayList是線程不安全的,但比Vector效率更高。
ArrayList底層源碼分析
ArrayList底層維護了一個Object類型的數組elementData。(transient Object[] elementData;)
當創建對象時,如果是用的是無參構造器public ArrayList(),則默認初始化elementData容量為0。
當添加元素時:先判斷是否有足夠的容量進行添加,若不夠則進行擴容,調用grow()方法,若足夠則直接在對應位置添加元素即可。
在使用無參構造public ArrayList()的情況下第一次擴容默認為10,之后再需要擴容的話,則擴容elementData為1.5倍,即10 + 10 / 2 = 15
若使用有參構造public ArrayList(int initialCapacity),則默認初始化elementData容量為initialCapacity。那么在第一次擴容時,則直接擴容elementData到1.5倍initialCapacity。
源碼追蹤
代碼說明:
package class_ArrayList;import java.util.ArrayList;public class ClassTest01_Debug {? @SuppressWarnings({ "unchecked", "rawtypes" }) public s.........