public E remove(int paramInt)
{
RangeCheck(paramInt);
this.modCount += 1;
Object localObject = this.elementData[paramInt];
int i = this.size - paramInt - 1;
if (i > 0)
System.arraycopy(this.elementData, paramInt + 1, this.elementData, paramInt, i);
this.elementData[(--this.size)] = null;
return localObject;
}
|
private void RangeCheck(int paramInt)
{
if (paramInt < this.size)
return;
throw new IndexOutOfBoundsException("Index: " + paramInt + ", Size: " + this.size);
}
|
首先必須先確定使用者要刪除的位置是否有超出陣列範圍,這裡使用RangeCheck(int)來檢查,若是超出範圍則會丟出IndexOutOfBoundsException例外。
如果範圍合理沒有超出範圍,這時候會算出刪除位置後所剩下的元素個數,接著使用System.arraycopy()這個方法將欲刪除元素後的所有元素加入到欲刪除的位置上。
實際操作如下面圖解:
欲刪除紅色
使用System.arraycopy(this.elementData, paramInt + 1, this.elementData, paramInt, i);將剩餘的陣列連接起來
+
該方法會將欲刪除部分之後(黃色)陣列連接到原來陣列欲刪除的位置(紅色)上。
this.elementData[(--this.size)] = null;
刪除最後一個元素
return localObject;
沒有留言:
張貼留言