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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

System.ArrayCopy 如何復(fù)制數(shù)組的數(shù)組?

System.ArrayCopy 如何復(fù)制數(shù)組的數(shù)組?

元芳怎么了 2023-08-04 17:36:38
假設(shè)我有以下數(shù)組聲明:new double[][] {new double[] {1, 2, 3}, new double[] {4,5,6}, new double[] {7,8,9}}我想將數(shù)組的內(nèi)容在給定方向上“翻譯”(移動(dòng))固定量,將現(xiàn)有內(nèi)容保留在未覆蓋的單元格中 - 例如:1 2 3                                1 1 24 5 6   Shifted by +1 in x becomes:  4 4 57 8 9                                7 7 81 2 3                                1 2 34 5 6   Shifted by +1 in y becomes:  1 2 37 8 9                                4 5 6我可以使用 System.arraycopy 相當(dāng)輕松地完成這些操作:按 dy 移位:boolean b2t = dy<0; // bottom to top movementdy = Math.abs(dy);if (b2t){    System.arraycopy(a, dy, a, 0, (a.length-dy));}else{    System.arraycopy(a, 0, a, dy, (a.length-dy));   }按 dx 平移:boolean l2r = dx>0; // left to right movementdx = Math.abs(dx);for (double[] i : a){    if (l2r)    {        System.arraycopy(i, 0, i, dx, (i.length-dx));    }    else    {        System.arraycopy(i, dx, i, 0, (i.length-dx));       }}   當(dāng)我嘗試同時(shí)做這兩件事時(shí),有趣的行為就會(huì)出現(xiàn)(例如dx = 1 and dy = 1)。如果我按照所示順序使用上面的代碼(dy 然后 dx),則復(fù)制的數(shù)組似乎在 for 循環(huán)迭代中針對(duì)從中復(fù)制的數(shù)組進(jìn)行了更新。例如,對(duì)于 1..9 示例,對(duì)于 dx = 1 和 dy = 1,我觀察到的變化如下:Orig.        dy   for:dx(1)      dx(2)      dx(3)1 2 3      1 2 3      1 1 2      1 1 1      1 1 14 5 6   -> 1 2 3   -> 1 1 2   -> 1 1 1   -> 1 1 17 8 9      4 5 6      4 5 6      4 5 6      4 4 5正如您所看到的,在轉(zhuǎn)換for循環(huán)期間dx,它將第一行和第二行視為同一個(gè)對(duì)象;因此應(yīng)用轉(zhuǎn)換兩次 - 兩次將其應(yīng)用到兩個(gè)數(shù)組。System.arraycopy 的文檔指出:如果 src 和 dest 參數(shù)引用相同的數(shù)組對(duì)象,則執(zhí)行復(fù)制操作,就好像位置 srcPos 到 srcPos+length-1 處的組件首先被復(fù)制到具有 length 組件的臨時(shí)數(shù)組中,然后臨時(shí)數(shù)組的內(nèi)容被復(fù)制到復(fù)制到目標(biāo)數(shù)組的 destPos 到 destPos+length-1 位置。換句話說,當(dāng)dy轉(zhuǎn)換完成時(shí),頂部?jī)尚斜粡?fù)制到一個(gè)單獨(dú)的臨時(shí)數(shù)組,然后返回到主數(shù)組,a但處于移位的位置。在我看來,它是將 復(fù)制reference到數(shù)組,而不是數(shù)組本身 - 這是發(fā)生了什么嗎?無論如何,我可以通過交換代碼來解決這個(gè)問題,這樣它就可以在 dy 之前進(jìn)行 dx 轉(zhuǎn)換;但確認(rèn)這里發(fā)生的事情會(huì)很有趣;因?yàn)槿绻蚁雽⑵鋽U(kuò)展為 3 個(gè)維度,我將無法僅僅通過重新排列它來使其發(fā)揮作用。
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

是的,就是復(fù)制參考文獻(xiàn)。

二維數(shù)組實(shí)際上是一個(gè)數(shù)組,其元素是數(shù)組類型的對(duì)象。

因此,當(dāng)System.arraycopy將源數(shù)組的元素復(fù)制到目標(biāo)數(shù)組時(shí)(無論它們是否是同一數(shù)組),它都會(huì)復(fù)制對(duì)這些元素的引用,在您的情況下這意味著對(duì)內(nèi)部數(shù)組的引用。


查看完整回答
反對(duì) 回復(fù) 2023-08-04
  • 1 回答
  • 0 關(guān)注
  • 115 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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