arraylist的底層資料結構是動態陣列
capacity相當於初始化陣列的大小
size就相當於陣列的實際長度
> /**
* default initial capacity.
*/private static final int default_capacity = 10;
檢視原始碼可以發現,預設容量是10。
但是當我們使用無參構造的方法時,初始的arraylist的陣列容量仍是0 。當我們新增第乙個元素時,size=1;只有當我們使用add方法新增元素的時候,才真正為陣列分配大小為10的容量。在這裡插入**片
當我們新增第十個元素的時候,此時size=10;
當我們新增第十乙個元素的時候,此時的size就變成了11,但是呢?arraylist的容量只有10,這個時候可能裝不下第十乙個元素,此時arraylist的擴容機制就發揮作用了。
當陣列的size=capacity時,如果繼續往陣列中新增元素,此時就會新建乙個1.5倍容量的陣列。然後把之前的陣列複製到新的陣列,將之前的陣列進行銷毀等一系列操作。
因為擴容的倍數越大,開闢的空間就越多,很可能造成空間的浪費。
擴容倍數越小,可能造成開闢的空間不夠使用的,會增加擴容的次數,這樣很影響程式的效能。因為一次擴容包括陣列的新建、將原來的陣列拷貝到新陣列上,銷毀原來的陣列等一系列操作。
當然,1.5是經過科學的計算方式。
ArrayList擴容機制
1.成員變數 預設給定的初始容量 private static final int default capacity 10 無參構造器中所使用到的空陣列例項 private static final object empty elementdata 有參構造器中所使用到的空陣列例項 private ...
ArrayList擴容機制
arraylist實現了list介面。它是乙個可調整大小的陣列,可以用來存放各種形式的資料。並提供了包括crud在內的多種方法可以對資料進行操作,但是它不是執行緒安全的。list擴容實現步驟總的來說就是分兩步 陣列定義的時候,因為需要給它分配連續的記憶體空間,需要預先指定其大小。因此當存放的資料大於...
ArrayList的擴容機制
arraylist的擴容機制 當向arraylist中新增元素的時候,arraylist的儲存容量如果滿足新元素的容量要求,則直接儲存 arraylist的儲存容量如果不滿足新元素的容量要求,arraylist會增強自身的儲存能力,以達到儲存新元素的要求。因為不同的jdk版本的擴容機制可能有差異,下...