ArrayList容量和数组大小区别

java可以创建固定大小数组或使用列表类实现类似功能。本文我简要说明下ArrayList容量和数组大小区别,同时也说明初始化ArrayList时如何指定其容量大小。

1. 示例展示两者差异

首先创建数组,java需要强制指定大小。

Integer[] array = new Integer[100]; 
System.out.println("Size of an array:" + array.length);

这里指定数组大小为100,结果为:Size of an array:100

接着创建ArrayList,使用初始容量也为100:

List<Integer> list = new ArrayList<>(100);
System.out.println("Size of the list is :" + list.size());

结果为:Size of the list is :0

在没有加入元素时其大小为0。现在增加一个元素再检查其大小:

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

结果为:Size of the list is :1

2. 对比数组大小和列表容量

数组是固定大小,一旦数组使用int值初始了其大小,则不能再改变。其大小和容量是相等的。

ArrayList大小和容量不是固定的。列表的逻辑大小随着插入、删除操作而改变,和实际物理存储大小分别进行管理。当达到ArrayList列表容量的阈值时,会扩展其容量用于存储更多元素。

数组内存在创建时分配。当初始化数组时,会根据其数组大小和元素类型分配内存。对于引用类型初始化为null,原始类型为其默认值。

ArrayList随这其元素增长改变内存分配。初始化ArrayList时指定容量,其分配足够空间存储元素直到达到容量,这时扩展容量,创建新的、更大的列表,并拷贝原来的值到新的列表。

3. ArrayList初始化容量

我们可能想在创建ArrayList之前确定其容量,通常这不是必须的,但至少需要了解其中原理。

当我们知道元素大小时,使用确切的大小初始化ArrayList非常好,从而避免高昂的增长及拷贝操作。类似地,如果列表非常大,自动增长操作可能会分配比实际所需更多的内存。这是因为每次增长数量是按照到目前为止大小的比例计算的。因此对于大型列表,这可能会导致内存浪费。

如果我们有很多小集合,那么数组列表的自动容量可能会提供大量浪费的内存。假设ArrayList初始容量大小为10,需要存储的元素只有2或3个元素。这意味着70%的内存被浪费,如果我们有很多这样的列表,这可能非常浪费。

对于灵活大小对象容器,ArrayList是非常好的解决方案。它支持随机访问,比数组稍微多占用点内存,但提供了丰富的集合操作。

在一些场景中,特别对于非常大的原始类型集合,使用标准数组可能更快、占用空间更少。类似的,存储可变元素且不需要索引访问,LinkList性能更好,无需额外的内存管理。

4. 总结

本文对比ArrayList容量和数组大小。同时也简要说明了ArrayList初始化容量及避免内存空间浪费。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值