ArrayList
使用Object
數組存儲數組元素,並使用size
屬性記錄數組長度。數組
須要注意ArrayList
是非線程安全的。安全
ArrayList
的默認初始長度是多少?最大長度是多少?ArrayList
的默認初始長度是10
,是由DEFAULT_CAPACITY
設定的。線程
因爲ArrayList
底層是用Object
數組存儲元素,因此ArrayList
最大長度爲Integer.MAX_VALUE
,即2147483647(2)
。這裏須要注意常量MAX_ARRAY_SIZE(Integer.MAX_VALUE - 8)
並非ArrayList
真正的最大長度,緣由能夠參考hugeCapacity()
方法。code
ArrayList
是如何擴容的?ci
擴容發生在插入數組元素時(關鍵方法爲grow()
方法)it
ArrayList
長度size
size
與minCapacity
比較來判斷是否須要擴容newCapacity
爲原數組長度oldCapacity
的1.5
倍(oldCapacity
帶符號右移1
位並加上oldCapacity
)。newCapacity
長度超過Array的最大支持長度MAX_ARRAY_SIZE
則調用hugeCapacity()
進行特殊處理防止數組超出最大長度(int最大值)。ArrayList
擴容後是否會自動縮容?若是不能怎樣進行縮容?ArrayList
只能自動擴容,不能自動縮容。若是須要進行縮容,能夠調用ArrayList
提供的trimToSize()
方法。List
表面上是調用Arrays.copyOf()
方法,其實是Arrays.copyOf()
經過調用System.arraycopy()
方法確保高效複製數組。方法