为什么ArrayList初始化容量大小为10?

戚薇 Java经验 发布时间:2022-07-13 17:09:09 阅读数:3695 1
今天笔者在看源码时,无意间发现Arraylist的初始化容量大小为10
那么它为什么要设置为10呢?
下文笔者将一一道来,如下所示

ArrayList源码查看

/**
 * Default initial capacity.
 */
private static final int DEFAULT_CAPACITY = 10;
从jdk1.2~jdk1.6源码中一直是默认10
jdk1.7及之后,则默认为空数组

/**
 * Shared empty array instance used for default sized empty instances. We
 * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
 * first element is added.
 */
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

/**
 * Constructs an empty list with an initial capacity of ten.
 */
public ArrayList() {
	this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

 public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
在add方法中调用了ensureCapacityInternal方法,进入该方法一开始是一个空容器所以size=0传入的minCapacity=1:

    private void ensureCapacityInternal(int minCapacity) {
        ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
    }

上述方法中先通过calculateCapacity来计算容量:

    private static int calculateCapacity(Object[] elementData, int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            return Math.max(DEFAULT_CAPACITY, minCapacity);
        }
        return minCapacity;
    }

我们会惊奇的发现,jdk1.7之后采用懒加载的方式,实现默认容量为10
 那么从上面的默认容量为10
 可能只是作者的习惯而已,没有任何实质性的用途
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202207/16577033803971.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者