亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java:刪除/打包方法,有人可以解釋一下嗎?

Java:刪除/打包方法,有人可以解釋一下嗎?

神不在的星期二 2021-09-29 17:10:57
有人可以向我解釋這種方法是如何工作的嗎?我不明白他們如何在數組中移動以刪除項目索引。private void pack(int index) {.    for(int i =index; i<noOfItems-1; i++)        theItems[i]=theItems[i+1];    noOfItems--;}
查看完整描述

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在用來計算數組的末尾,因此不再看到它。


查看完整回答
反對 回復 2021-09-29
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

他們正在將數組的下一個值寫入其中并減小數組大小。

例如,

int a[] = new int[] {1,2,3,4,5}

如果我打電話,pack(2)那么打印 a 的輸出是

{1,2,4,5,5}


查看完整回答
反對 回復 2021-09-29
?
吃雞游戲

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)。


在某些情況下,這會出現問題 - 特別是,當數組的“死”部分中有大對象時,它們可能會“徘徊”超過它們應該有資格進行垃圾收集的時間。


查看完整回答
反對 回復 2021-09-29
  • 3 回答
  • 0 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號