ArrayList
ArrayList是List介面的實現類,它是支援根據需要而動態增長的陣列。java中標準陣列是定長的,在陣列被建立之後,它們不能被加長或縮短。這就意味著在建立陣列時需要知道陣列的所需長度,但有時我們需要動態程式中獲取陣列長度。ArrayList就是為此而生的,但是它不是執行緒安全的,外ArrayList按照插入的順序來存放資料
ArrayList擴容發生在add()方法呼叫的時候, 呼叫ensureCapacityInternal()來擴容的,透過方法calculateCapacity(elementData, minCapacity)獲取需要擴容的長度
ensureExplicitCapacity方法可以判斷是否需要擴容
ArrayList擴容的關鍵方法grow(): 獲取到ArrayList中elementData陣列的記憶體空間長度 擴容至原來的1.5倍
呼叫Arrays.copyOf方法將elementData陣列指向新的記憶體空間時newCapacity的連續空間
從此方法中我們可以清晰的看出其實ArrayList擴容的本質就是計算出新的擴容陣列的size後例項化,並將原有陣列內容複製到新陣列中去。