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
以及它在内存使用和性能方面的好处。
0 评论