Java中ArrayList的容量與數組的大小

1.概述

Java允許我們創建固定大小的數組或使用集合類來完成類似的工作。

在本教程中,我們將研究ArrayList的容量和Array的大小之間的差異。

我們還將查看一些示例,說明何時應ArrayList以及在內存使用方面的優缺點。

2.例子

要了解差異,讓我們首先嘗試兩個選項。

2.1。數組大小

在Java中,必須在創建數組的新實例時指定數組的大小:

Integer[] array = new Integer[100];

 System.out.println("Size of an array:" + array.length);

在這裡,我們創建了一個I nteger大小100的陣列,這導致了以下的輸出

數組大小:100

2.2。 ArrayList容量

現在,讓我們創建一個初始容量為100 ArrayList

List<Integer> list = new ArrayList<>(100);

 System.out.println("Size of the list is :" + list.size());

列表的大小為:: 0

由於尚未添加任何元素,因此大小為零。

現在,讓我們向列表中添加一個元素並檢查其大小:

list.add(10);

 System.out.println("Size of the list is :" + list.size());

列表的大小是:1

3.數組大小與ArrayList

ArrayList.容量之間的一些主要區別。

3.1。尺寸修改

數組是固定大小的。一旦我們使用一些int值作為其大小初始化數組,就無法更改。大小和容量也彼此相等。

ArrayList的大小和容量不固定。列表的邏輯大小根據其中元素的插入和刪除而變化。這是與其物理存儲大小分開管理的。 ArrayList容量的閾值時,它將增加其容量以為更多元素騰出空間。

3.2。內存分配

陣列內存是在創建時分配的。當我們初始化數組時,它根據數組的大小和類型分配內存。 null值初始化所有元素,而對於原始類型,它使用默認值初始化。

ArrayList**隨著內存分配的增長而變化。**當我們在初始化ArrayList時指定容量時,它將分配足夠的內存來存儲達到該容量的對象。邏輯大小保持為0。是時候擴展容量了,創建了一個更大的新數組,並將值複製到該數組中。

ArrayList對象,有一個特殊的單例0大小的數組,這使得創建它們非常便宜。還值得注意的是, ArrayList內部使用對象引用的數組。

4.何時使用容量ArrayList

ArrayList之前需要知道其大小時,我們可能希望初始化它的容量,但這通常不是必需的。但是,出於某些原因,這可能是最好的選擇。

4.1。建立一個大型ArrayList

當我們知道列表會變大時,最好使用初始容量初始化列表。這可以防止在添加元素時進行一些代價高昂的增長操作。

同樣,如果列表很大,則自動增長操作可能會分配比確切最大大小所需的內存更多的內存。這是因為到目前為止,每次增長的數量是按其大小的比例計算的。因此,對於大列表,這可能會導致內存浪費。

4.2。構建小型的ArrayList

如果我們有很多小的集合,那麼ArrayList的自動容量可能會提供很大一部分浪費的內存。假設ArrayList首選10且元素數量較少的大小,但我們只存儲2或3。這意味著70%的內存浪費了,如果我們有大量的這些列表,這可能很重要。

預先設置容量可以避免這種情況。

5.避免浪費

我們應該注意, ArrayList是一個很好的解決方案,它可以支持隨機訪問。它比陣列消耗更多的內存,但是提供了更豐富的操作集。

在某些使用情況下,尤其是在大量原始值集合周圍,標準數組可能會更快並且使用更少的內存。

類似地,對於存儲不需要通過索引訪問的可變數量的元素, LinkedList性能可能更高。它不會帶來任何內存管理開銷。

6.總結

在這篇簡短的文章中,我們看到了ArrayList的容量和數組大小之間的差異。我們還研究了何時應ArrayList以及它在內存使用和性能方面的好處。