论坛首页 编程语言技术论坛

ArrayList源代码详解

浏览 1162 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-06-02  

看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){ 
//抛出越界异常 
} 
} 

 

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics