ArrayList的基本工作原理详解remove

其实remove(index),add(index,e)类似去操作下标增加或者删除的。其实用ArrayList挺费劲的。
下面就看看费劲在哪。
拿remove来说

 public E remove(int index) {
        //第一步先判断是否有越界,如果越界直接IndexOutOfBoundsException
        rangeCheck(index);

        modCount++;
        //把该元素从数组中提出
        E oldValue = elementData(index);
        //需要复制的长度
        int numMoved = size - index - 1;
        if (numMoved > 0)
        //原数组,从哪开始复制,目标数组,复制起始位置,长度。过程如下图:
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        //赋值null等待回收
        elementData[--size] = null; 

        return oldValue;
    }

比如删除下标3的元素
原数组:elementData
从哪开始复制:index+1 = 4
目标数组:elementData
复制起始位置:index =3
长度: size - index - 1=6
这里写图片描述

所以使用Array按照下标去实现删除效率很低

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值