ArrayList常見問題

簡介

ArrayList使用Object數組存儲數組元素,並使用size屬性記錄數組長度數組

須要注意ArrayList非線程安全的。安全

常見問題彙總

  1. ArrayList的默認初始長度是多少?最大長度是多少?

    ArrayList的默認初始長度是10,是由DEFAULT_CAPACITY設定的。線程

    因爲ArrayList底層是用Object數組存儲元素,因此ArrayList最大長度爲Integer.MAX_VALUE,即2147483647(2)。這裏須要注意常量MAX_ARRAY_SIZE(Integer.MAX_VALUE - 8)並非ArrayList真正的最大長度,緣由能夠參考hugeCapacity()方法。code

  2. ArrayList是如何擴容的?ci

    擴容發生在插入數組元素時(關鍵方法爲grow()方法)it

    • 先計算增長完新元素後的ArrayList長度size
    • 而後sizeminCapacity比較來判斷是否須要擴容
    • 擴容時通常擴容爲新數組長度newCapacity爲原數組長度oldCapacity1.5倍(oldCapacity帶符號右移1位並加上oldCapacity)。
    • 特殊狀況是存在newCapacity長度超過Array的最大支持長度MAX_ARRAY_SIZE則調用hugeCapacity()進行特殊處理防止數組超出最大長度(int最大值)。
  3. ArrayList擴容後是否會自動縮容?若是不能怎樣進行縮容?

    ArrayList只能自動擴容,不能自動縮容。若是須要進行縮容,能夠調用ArrayList提供的trimToSize()方法。List

  4. ArrayList底層數組擴容時是如何保證高效複製數組的?

    表面上是調用Arrays.copyOf()方法,其實是Arrays.copyOf()經過調用System.arraycopy()方法確保高效複製數組。方法

相關文章
相關標籤/搜索