1 回答

TA貢獻(xiàn)1783條經(jīng)驗 獲得超4個贊
簡而言之,深拷貝就是分配一個新的內(nèi)存區(qū)域來存儲您要復(fù)制的任何內(nèi)容的副本。在深度復(fù)制數(shù)組的情況下,您將創(chuàng)建一個新數(shù)組并使用 for 循環(huán)將值從原始數(shù)組復(fù)制到新數(shù)組中。我可以收集到的 createDeepCopyOfTour 函數(shù)的目的是創(chuàng)建一個新數(shù)組,其中包含靜態(tài) TOUR 數(shù)組中指定索引的游覽航點。
不幸的是,它并不像下面這樣簡單:
private static final int[][][] TOUR = new int[][][]{
{{0, 0}, {4, 0}, {4, 3}, {0, 3}},
{{0, 0}, {3, 0}, {3, 4}, {0, 0}},
{{1, 3}, {3, 2}, {0, 4}, {2, 2}, {3, 1}, {1, 4}, {2, 3}},
{{-2, -1}, {-2, +3}, {4, 3}, {0, 0}}
};
public static int[][] createDeepCopyOfTour(int idx) {
return TOUR[idx];
}
以上將創(chuàng)建一個淺表副本,并且只會返回對原始數(shù)組的引用。要創(chuàng)建深拷貝,您需要使用 new 關(guān)鍵字創(chuàng)建一個新數(shù)組,該關(guān)鍵字將為您想要復(fù)制的任何內(nèi)容分配新內(nèi)存,然后使用 for 循環(huán)將值復(fù)制到新數(shù)組中。幸運(yùn)的是,這很簡單,因為我們知道每個航路點坐標(biāo)只有兩個軸,所以您只需要一個 for 循環(huán)來復(fù)制值。
private static final int[][][] TOUR = new int[][][]{
{{0, 0}, {4, 0}, {4, 3}, {0, 3}},
{{0, 0}, {3, 0}, {3, 4}, {0, 0}},
{{1, 3}, {3, 2}, {0, 4}, {2, 2}, {3, 1}, {1, 4}, {2, 3}},
{{-2, -1}, {-2, +3}, {4, 3}, {0, 0}}
};
public static int[][] createDeepCopyOfTour(int idx) {
int tour[][] = new int[TOUR[idx].length][2];
for (int i = 0; i < TOUR[idx].length; i++)
{
tour[i][0] = TOUR[idx][i][0];
tour[i][1] = TOUR[idx][i][1];
}
return tour;
}
添加回答
舉報