new ArrayList()方法初始化容量是0还是10

举报
object 发表于 2023/09/15 10:08:50 2023/09/15
【摘要】 我们都知道集合都会有自己默认的空间大小,像arrayList,虽然他是一个可变的集合,即使里面没有数据,但是也会占有固定的长度的空间。所以在知道集合长度,且知道不会变的清空下,指定长度会更加的节省空间。但是集合还会涉及扩容的问题,所以使用的时候也需要注意。至于为什么不直接使用数组,集合类一些好用的函数还是方便很多。ok,回归正题。有一次看到成员直接return new ArrayList()...

我们都知道集合都会有自己默认的空间大小,像arrayList,虽然他是一个可变的集合,即使里面没有数据,但是也会占有固定的长度的空间。

所以在知道集合长度,且知道不会变的清空下,指定长度会更加的节省空间。

但是集合还会涉及扩容的问题,所以使用的时候也需要注意。至于为什么不直接使用数组,集合类一些好用的函数还是方便很多。

ok,回归正题。

有一次看到成员直接return new ArrayList()。此种情况下,我就思考,已经确定返回的是空集合,是不是返回 java.util下工具类提供的空数组更好呢。

所以确定一下 new ArrayList();  的初始化过程,初始化容量。


首先需要确认:

查看 new ArrayList(); 只有短短一行,提示就是赋值了一个空数组。证明 new ArrayList()时的容量为0。

执行代码:

int size = new ArrayList().size();
// 此处输出结果为0
System.out.println("size = " + size);

证明结果确实为0,但是我们经常有听说arrayList的初始容量为10,这又是怎么回事呢? 而且ArrayList类,也确实有静态常量为10。

那么什么时候触发呢,我们一般新建了一个集合后,就会进行添加元素add()。我们查看add()方法。

需要注意这里的size,后续需要追溯这个size。

继续查看调用,这里有使用, 其中elementData是当前集合的元素,minCapacity就是前文提到的size。它是当前集合的size。不过add()中并没有看到该size的初始化代码,不过有一点需要注意,就是int的初始化变量是0,所以Math.max()计算得出使用了默认初始容量10.

结论:

new ArrayList()。未指定容量的情况下,创建的数组是0。  指定的情况下,则会创建对应大小的集合。

add()添加元素的时候,如何为空集合,则会创建初始化容量为10的集合

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。