Java中的ArrayList的初始容量和容量分配

2021-07-29 02:37:27 字數 936 閱讀 3550

**:

list介面的大小可變陣列的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。

arraylist繼承於list介面,除繼承過來的方法外,還提供一些方法來操作內部用來儲存列表的陣列的大小。

每個arraylist例項都有乙個容量。該容量是指用來儲存列表元素的陣列的大小。它總是至少等於列表的大小。隨著向arraylist中不斷新增元素,其容量也自動增長。並未指定增長策略的細節,因為這不只是新增元素會帶來分攤固定時間開銷那樣簡單。

arraylist是經常會被用到的,一般情況下,使用的時候會像這樣進行宣告:

list arraylist = new arraylist();

如果像上面這樣使用預設的構造方法,初始容量被設定為10。當arraylist中的元素超過10個以後,會重新分配記憶體空間,使陣列的大小增長到16。

可以通過除錯看到動態增長的數量變化:10->16->25->38->58->88->...

也可以使用下面的方式進行宣告:

list arraylist = new arraylist(4);

將arraylist的預設容量設定為4。當arraylist中的元素超過4個以後,會重新分配記憶體空間,使陣列的大小增長到7。

可以通過除錯看到動態增長的數量變化:4->7->11->17->26->...

那麼容量變化的規則是什麼呢?請看下面的公式:

((舊容量 * 3) / 2) + 1

注:這點與c#語言是不同的,c#當中的演算法很簡單,是翻倍。

一旦容量發生變化,就要帶來額外的記憶體開銷,和時間上的開銷。

所以,在已經知道容量大小的情況下,推薦使用下面方式進行宣告:

list arraylist = new arraylist(capacity_size);

即指定預設容量大小的方式。

後面還有,但我看的不是很懂,就沒轉,看具體的話點鏈結

Java中的ArrayList的容量

list介面的大小可變陣列的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。arraylist繼承於list介面,除繼承過來的方法外,還提供一些方法來操作內部用來儲存列表的陣列的大小。每個arraylist例項都有乙個容量。該容量是指用來儲存列表元素的陣列的大小。它總是至少等於列...

Java中的ArrayList的容量

list介面的大小可變陣列的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。arraylist繼承於list介面,除繼承過來的方法外,還提供一些方法來操作內部用來儲存列表的陣列的大小。每個arraylist例項都有乙個容量。該容量是指用來儲存列表元素的陣列的大小。它總是至少等於列...

Java中的ArrayList的容量

list介面的大小可變陣列的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。arraylist繼承於list介面,除繼承過來的方法外,還提供一些方法來操作內部用來儲存列表的陣列的大小。每個arraylist例項都有乙個容量。該容量是指用來儲存列表元素的陣列的大小。它總是至少等於列...