ArrayList的基本工作原理详解remove

来源:互联网 发布:商业计划书的优化答案 编辑:程序博客网 时间:2024/06/15 19:22

其实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按照下标去实现删除效率很低