ArrayList

本文分析了ArrayList在Java开发中的默认大小(初始化为0并自动扩容至10),以及其扩容因子(实际为原长度除以2向下取整)。作者提供了源代码片段以支持其观点,欢迎读者指正。
摘要由CSDN通过智能技术生成

ArrayList在ava开发中经常用到。也是面试的常客。那么它的默认大小、扩容因子是多少呢?

网上有人说,arrayList的初始默认大小是10。结合源代码可以知道,我认为声明一个ArrayList后默认值是0,然后会做一个扩容使其长度达到10;(扩容调用的是add方法,具体在哪里用的还没找到)。

下面是源代码:

public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

那么他的扩容因子是多少呢?网上说是0.75;查看源代码后,我认为也不够正确。正确的是应该是原长度除以2 并向下取整,并且每添加一个元素都要计算它的长度并决定是否扩容。

源代码:

添加元素:

private void add(E e, Object[] elementData, int s) {
        if (s == elementData.length)
                elementData = grow();
        elementData[s] = e;
        size = s + 1;
}

扩容函数:

private Object[] grow(int minCapacity) {
        return elementData = Arrays.copyOf(elementData,newCapacity(minCapacity));
}

private int newCapacity(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity <= 0) {
                if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
                        return Math.max(DEFAULT_CAPACITY, minCapacity);
                if (minCapacity < 0) // overflow
                        throw new OutOfMemoryError();
                return minCapacity;
        }
        return (newCapacity - MAX_ARRAY_SIZE <= 0) ?

                newCapacity : hugeCapacity(minCapacity);
}

以上只是我自己的看法,如有不对的地方请指正

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值