拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Java中ArrayList的容量与数组的大小

Java中ArrayList的容量与数组的大小

白鹭 - 2021-11-24 609 0 0

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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *