1 回答

TA貢獻1783條經驗 獲得超4個贊
簡而言之,深拷貝就是分配一個新的內存區域來存儲您要復制的任何內容的副本。在深度復制數組的情況下,您將創建一個新數組并使用 for 循環將值從原始數組復制到新數組中。我可以收集到的 createDeepCopyOfTour 函數的目的是創建一個新數組,其中包含靜態 TOUR 數組中指定索引的游覽航點。
不幸的是,它并不像下面這樣簡單:
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];
}
以上將創建一個淺表副本,并且只會返回對原始數組的引用。要創建深拷貝,您需要使用 new 關鍵字創建一個新數組,該關鍵字將為您想要復制的任何內容分配新內存,然后使用 for 循環將值復制到新數組中。幸運的是,這很簡單,因為我們知道每個航路點坐標只有兩個軸,所以您只需要一個 for 循環來復制值。
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;
}
添加回答
舉報