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;
}
添加回答
举报