第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Java:調(diào)整大小方法,有人可以解釋一下嗎?

Java:調(diào)整大小方法,有人可以解釋一下嗎?

人到中年有點甜 2021-09-29 13:37:59
我不確定這種方法是如何工作的。我的理解是我們創(chuàng)建了一個臨時數(shù)組,其大小是theItems.length(theItems 是另一個數(shù)組)的兩倍。之后,我們將項目復(fù)制到臨時數(shù)組,最后我們寫 theItems = temp; (我不確定為什么以及會發(fā)生什么)(這是否意味著 theItems 的大小也翻了一番?)。我們不能在不使用 temp 的情況下將 theItems 的大小加倍嗎?private void resize() {    String[] temp = new String[theItems.length*2];    for (int i=0 ; i < noOfItems ; i++){        temp[i]=theItems[i];    }    theItems=temp;}
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經(jīng)驗 獲得超4個贊

我不確定為什么會發(fā)生什么


您正在創(chuàng)建另一個數(shù)組,為其他元素提供更多空間。數(shù)組在 Java 中具有固定大??;一旦創(chuàng)建,就無法更改。在這里,新數(shù)組的長度是舊數(shù)組的兩倍。然后一個簡單的for循環(huán)復(fù)制元素引用。


這是否意味著 theItems 的大小也翻了一番?


不,數(shù)組引用theItems被重新分配給剛創(chuàng)建的新的、更大的數(shù)組。


我們不能在不使用 temp 的情況下將 theItems 的大小加倍嗎?


您可以只theItems用一個新數(shù)組替換,但隨后您就丟失了對包含要保留的所有項目的原始數(shù)組的引用,因此這沒有用。


這是發(fā)生的事情:


初始條件。


theItems -> ["one", "two", "three"]

已創(chuàng)建新陣列。


theItems -> ["one", "two", "three"]


temp     -> [null , null , null , null, null, null]

已復(fù)制項目。


theItems -> ["one", "two", "three"]


temp     -> ["one", "two", "three", null, null, null]

變量theItems被重新分配。


theItems \       ["one", "two", "three"]  <- will be garbage collected.

         |

temp   --+> ["one", "two", "three", null, null, null]

該變量temp將超出范圍,但theItems仍會引用新數(shù)組。


查看完整回答
反對 回復(fù) 2021-09-29
?
手掌心

TA貢獻1942條經(jīng)驗 獲得超3個贊

String[] temp = new String[theItems.length*2];創(chuàng)建Array兩倍大小的theItems. 所以說如果theItems是{"Hello", "Hi", "Goodbye", "Bye"}我們就會有


__ __ __ __ __ __ __ __


作為temp。然后


for(int i=0; i<noOfItems; i++){

    temp[i]=theItems[i];

}

將項目復(fù)制到temp. 所以我們會有:


"Hello", "Hi", "Goodbye", "Bye" __ __ __ __


(最后四個空格)


然后theItems=temp;賦值theItems給temp. 這樣,變量theItems將有四個空格,并且可以向其中添加更多項。


請注意,Arrays該類已經(jīng)內(nèi)置了一個函數(shù)來執(zhí)行此操作:Arrays.copyOf


查看完整回答
反對 回復(fù) 2021-09-29
?
慕萊塢森

TA貢獻1810條經(jīng)驗 獲得超4個贊

最后要回答你的問題,你可以使用像注釋演示的輔助方法,但在某處,必須創(chuàng)建一個單獨的新數(shù)組并復(fù)制所有項目。

數(shù)組是一種固定大小的構(gòu)造——一旦你創(chuàng)建了一個,你就不能就地變大或變小。創(chuàng)建數(shù)組時,Java 堆的一部分(這是存儲對象的內(nèi)存區(qū)域的術(shù)語)等于一項的大?。ㄔ诒纠袨閷ψ址囊茫┏艘詳?shù)組的長度保留,并且對該內(nèi)存的引用分配給您在語句左側(cè)指定的變量,如String[] items = new String[10].

因此,要items變大,您必須創(chuàng)建一個所需大小的新數(shù)組,按順序復(fù)制所有現(xiàn)有項目,然后將保存較小數(shù)組的變量重新分配給較大數(shù)組的引用,此時保存在tempitems = temp;簡單地將引用復(fù)制到itemssoitemstemp引用相同的數(shù)組。然后當(dāng)方法結(jié)束時,items保留 whiletemp被刪除。

此外,由于現(xiàn)在有一個items沒有變量引用的數(shù)組(之前提到的),Java 將在其垃圾收集周期中負(fù)責(zé)清理舊數(shù)組。但是,您不必?fù)?dān)心數(shù)組中的項目會消失,因為您將它們的引用復(fù)制到新數(shù)組中。


查看完整回答
反對 回復(fù) 2021-09-29
  • 3 回答
  • 0 關(guān)注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號