随笔: JAVA ArrayList 源码的add方法疑惑

 public void add(int index, E element) {
        rangeCheckForAdd(index);
        modCount++;
        final int s;
        Object[] elementData;
        if ((s = size) == (elementData = this.elementData).length)
            elementData = grow();
        System.arraycopy(elementData, index,
                         elementData, index + 1,
                         s - index);
        elementData[index] = element;
        size = s + 1;
    }

看过源码之后明白了逻辑,可还是不知其所以然:

1、为什么创建本地变量elementData并引用了this.elementData,不直接使用后者呢?

2、这其中复制了几遍原数组?首先grow()反回了size++长度的新数组2,arraycopy方法内复制出了一个暂时的数组3存放elementData再复制进数组2。期间出现了两个新长度的数组,为什么不能

 public void add(int index, E element) {
        rangeCheckForAdd(index);
        modCount++;
        final int s;
        Object[] NewArray;
        if ((s = size) == this.elementData.length)
            NewArray = grow();
       System.arraycopy(elementData, 0,
                         NewArray, 0,
                         index);
        elementData[index] = element;
        System.arraycopy(elementData, index,
                         NewArray, index + 1,
                         s - index);
        NewArray[index] = element;
        elementData = NewArray;
        size = s + 1;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值