java 数组元素位移的简单方法(ArrayList add方法源码)

ArrayList中有个方法是public void add(int index, E object)
这个方法是在第index位置上插入元素。
按照常规做法,肯定是,将数组中index(包括index的元素)位置后面的元素后移一位,然后空出index位置,插入当前元素。
但是下面的做法只需要一个函数就搞定了。
这个函数也就是 System.arraycopy(a, index, a, index + 1, s - index); 我一看顿时傻眼了,我感觉很麻烦的操作一行语句就搞定了。
至于arraycopy这个函数,是一个native方法,如何实现的不得而知。应该是C++或者c一类的,用的移位的算法不得而知。

这个方法就是将数组a 从index位置后面的(包括index处的元素)s-index 个元素位移到index+1处
反正我找到了一个很好用的函数。
下面介绍add方法的实现:

@Override public void add(int index, E object) {
        Object[] a = array;//将原来的数组赋值给一个新的引用
        int s = size;//原来数组元素个数
        if (index > s || index < 0) {//索引大于数组的个数,或者小于0则抛出 索引越界的异常
            throwIndexOutOfBoundsException(index, s);
        }

        if (s < a.length) {//如果数组的元素个数小于 数组的总容量 说明还有空间插入直接调用下面的方法
            //这个方法就是将数组a 从index位置后面的(包括index出的元素)s-index 个元素位移到index+1处
            System.arraycopy(a, index, a, index + 1, s - index);
        } else {//如果数组元素的个数等于数组的容量 则需要扩展一个新的更大的数组空间
            // assert s == a.length;
            Object[] newArray = new Object[newCapacity(s)];//新开辟了一块数组空间
            System.arraycopy(a, 0, newArray, 0, index);//将a中从0后面的index个元素位移到newarrry数组中
            System.arraycopy(a, index, newArray, index + 1, s - index);//然后再将index后面的元素放到newarray 的index+1处完成一次新的位移操作 此时index处的元素值为空
            array = a = newArray;
        }
        //最后将index处的元素赋值新对象
        a[index] = object;
        size = s + 1;//元素个数+1
        modCount++;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值