看remove方法的底层实现:
public E remove(int index){
RangeCheck(int index);//判断是否越界
modCount++;
E oldValue = (E)elementData[index];//获得删除的元素
int numMoved = size-index-1;//得到删除元素后面的元素个数
if(numMoved >0)
System.arraycopy(elementData,index+1,elementData,index,numMoved );//把后面的元素迁移一个位置
elementData[--size]=null;//把l数组的最后一个元素设为null
return oldValue;
}
由此可以发现,当删除特定位置的元素时,list的底层数组空间大小并没有改变,被删除元素的位置由后面的元素向前占用
get(index)的底层实现:
public E get(int index){
rangeCheck(index);//这里判断是否越界
return (E)elementData[index];
}
private void RangeCheck(int index){
if(index>size){
//抛出越界异常
}
}