浏览 1162 次
锁定老帖子 主题:ArrayList源代码详解
精华帖 (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的底层数组空间大小并没有改变,被删除元素的位置由后面的元素向前占用
public E get(int index){ rangeCheck(index);//这里判断是否越界 return (E)elementData[index]; } private void RangeCheck(int index){ if(index>size){ //抛出越界异常 } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |