使用集合初始化集合大小的原因

现在很多大的互联网公司都有明文规定在使用集合的时候需要初始化集合大小,但为什么要在这么做的原因以前不是很清楚,这两天想了下原因,以ArrayList举例

1.ArrayList扩容实现原理

    1.扩容:把原数组的数据复制到扩容后的数组

    2.添加元素:把新增元素添加到新数组中

2.ArrayList源码解析

从ArrayList定义的一些属性可以看出默认容量是10,

从ArrayList定义的一些属性可以看出默认容量是10,

这里能看出每次插入的时候先计算当前容量,若容量不足时会进行扩容操作,扩容容量为原容量+原容量右移位1,

然后将元数据copy到扩容后的数组中。

3.总结

通过以上可以得出,ArrayList在扩容的时候会做容量计算和数据复制操作,同样hashmap也一样,在进行扩容的时候会涉及到resize计算、hash重新计算、数据迁移等操作,所有在已知集合长度的情况下要设置集合容量默认值,避免无用的集合扩容。

posted @ 2019-07-02 21:06  非尚  阅读(527)  评论(0)    收藏  举报