Java中ArrayList的容量與數組的大小
- 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
以及它在內存使用和性能方面的好處。