1. 程式人生 > >ArrayList的基本工作原理詳解remove

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按照下標去實現刪除效率很低