3 回答

TA貢獻1825條經驗 獲得超6個贊
從索引開始,每個值都移動一個到數組的開頭。
theItem[index] = theItem[index+1];
theItem[index+1] = theItem[index+2];
由于 index 處的值永遠不會寫入新位置,因此無法再訪問它。
最后noOfItems減一,因為現在數組中的元素少了一個。
在調用 pack(4)的數組[1,2,3,4,5,6]上noOfItems = 6會發生以下情況:
[1,2,3,5,5,6]
[1,2,3,5,6,6]
noOfItems = 5
6數組中的最后一個沒有消失,但是由于每隔一段代碼(我猜)都noOfItems在用來計算數組的末尾,因此不再看到它。

TA貢獻1824條經驗 獲得超5個贊
他們正在將數組的下一個值寫入其中并減小數組大小。
例如,
int a[] = new int[] {1,2,3,4,5}
如果我打電話,pack(2)
那么打印 a 的輸出是
{1,2,4,5,5}

TA貢獻1829條經驗 獲得超7個贊
我不明白他們如何在數組中移動以刪除項目索引。
他們沒有。Java 數組的大小是固定的,因此代碼只是簡單地復制從一個元素開始index到noOfItems左邊的所有項,然后記錄數組所包含的項數減一這一事實。
這是一個例子:假設你從這個十元素數組開始
0 1 2 3 4 5 6 7 8 9
A B C D E F G H _ _
^
|
last item
現在您希望刪除索引 4 處的項目。該算法將按如下方式轉換數組:
0 1 2 3 4 5 6 7 8 9
A B C D F G H H _ _
^
|
last item
請注意,索引 7 處的項目被復制,但沒有被刪除。它的內容并不重要,因為它已經超過了最后一項的位置(即noOfItems)。
在某些情況下,這會出現問題 - 特別是,當數組的“死”部分中有大對象時,它們可能會“徘徊”超過它們應該有資格進行垃圾收集的時間。
添加回答
舉報