public boolean remove(Object paramObject)
{
int i;
if (paramObject == null)
for (i = 0; i < this.size; ++i)
{
if (this.elementData[i] != null)
continue;
fastRemove(i);
return true;
}
else
for (i = 0; i < this.size; ++i)
{
if (!(paramObject.equals(this.elementData[i])))
continue;
fastRemove(i);
return true;
}
return false;
}
|
從代碼可以看到,remove這個方法可以刪除目標之object物件,並且可以使用它來刪除我們陣列null值,null刪除與非null刪除使用不同的判斷式來完成。
當迴圈中找到刪除目標時,會呼叫fastRemove(int)這個方法將該位置的元素刪除,fastRemove這個方法與ArrayList.remove(int)方法極為相似(參考Java 源代碼分析系列
- ArrayList remove(int pst)),但fastRemove如其名,式快速的刪除,因此裡面並沒有多餘的判斷(超出大小等),即沒有回傳值。代碼如下:
private void fastRemove(int paramInt)
{
this.modCount += 1;
int i = this.size - paramInt - 1;
if (i > 0)
System.arraycopy(this.elementData, paramInt + 1, this.elementData, paramInt, i);
this.elementData[(--this.size)] = null;
}
|
欲刪除paramInt位置
|
|
|
|
|
|
|
|
|
|
使用System.arraycopy(this.elementData, paramInt + 1, this.elementData, paramInt, i);將剩餘的陣列連接起來
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
該方法會將欲刪除部分之後(黃色)陣列連接到原來陣列欲刪除的位置(紅色)上。
|
|
|
|
|
|
|
|
|
|
this.elementData[(--this.size)] = null;
刪除最後一個元素
|
|
|
|
|
|
|
|
|
沒有留言:
張貼留言