深拷贝2维数组
我一直在尝试做2维数组的深拷贝,但从来没有成功。 这是我的代码。深拷贝2维数组
class node {
public node head;
public node left;
public node right;
public node up;
public node down;
}
node[][] OriginalArrayOfNode = new node[100][200];
//filling original node
for (int n = 0; n < 200; n++) {
for(int m = 0; m < 100; m++) {
OriginalArrayOfNode[m][n].head = OriginalArrayOfNode[m][0];
OriginalArrayOfNode[m][n].left = ...
//etc
}
}
node[][]CopyArrayOfNode = new node[100][200];
//The code to copy the original array to new array should be here.
我的问题是我怎样才能将我的OriginalArrayOfNode深拷贝到CopyArrayOfNode? 在此先感谢。
编辑:
我试着使循环双向链表的副本,其中4个指针Knuth的舞蹈链接算法。追踪问题的位置很难,但我假设原始数组由于Knuth的DL算法而给出“x”,那么原始数组的正确深度副本也会给出“x”作为结果,前提是没有其他变量变化并且没有随机修饰符。但是,我尝试过clone()方法,arrayutil.copy()方法,并且它们都没有根据我上面的假设给出“正确的”深层副本。
在我看来,你是以一种非常奇怪的方式复制这个;几乎就像你试图复制错误的方式。
我会做更是这样的:
for (int m = 0; n < 200; m++) {
for(int n = 1; n < 100; n++) {
OriginalArrayOfNode[m][n].head = OriginalArrayOfNode[m][0].head;
OriginalArrayOfNode[m][n].left = OriginalArrayOfNode[m][0].left;
//etc
}
}
注:应该是从1开始N,因为你是从如你从0复制到其他人复制。
然而,我建议你做的是,你的课程节点添加了clone()
方法。然后克隆将提供原始类的精确副本。
class node {
public node head;
public node left;
public node right;
public node up;
public node down;
public node clone() {
final node clonedNode = new node();
node.head = this.head;
node.left = this.left;
node.right = this.right;
node.up = this.up;
node.down = this.down;
}
}
for (int n = 1; n < 200; n++) {
OriginalArrayOfNode[n] = OriginalArrayOfNode[m].clone(); }
这不是确切的代码,但你明白我的意思。
最后,需要注意的另一件事是,如果您尝试按照自己的方式进行深度复制,则可以使用ArrayUtil.copy(...)
从索引1 - 200轻松填充。
希望这一切都有所帮助。
我认为OriginalArrayOfNode
包含引用同一阵列中的其他节点的节点?在这种情况下,您将无法进行深层复制,除非您加强node
数据结构以包含其自己的2d索引。例如,如果OriginalArrayOfNode[0][0].right
碰巧指的是OriginalArrayOfNode[15][27]
,则在将结果分配给CopyArrayOfNode[0][0].right
之前,您将无法弄清楚是否需要从旧阵列到新阵列执行索引[15][27]
的深层副本,除非您搜索旧阵列彻底使用对象身份。即使你可以忍受蛮力搜索所有节点,或者你可以修改node
数据结构以包含它自己的索引,也可能会有通过跟随这些链接形成的循环,使任何尝试确定正确的顺序来复制事物。如果你可以保证有一定的链接链接不会导致循环,并且你可以有效地确定每个节点的二维索引,你可能有机会。
是的:)我想到了复杂化,因此我放弃了试图做一个深层复制,然后声明然后填充一个新的数组。尽管我设法深度复制阵列,但它会像创建一个新的阵列一样效率低下。不管怎么说,还是要谢谢你 :) – JrL 2012-08-09 10:32:11
你有什么问题吗?你有什么尝试?你卡在哪里? – user1118321 2012-08-09 03:42:30
我无法复制我的2维数组。我试过克隆(),但它没有奏效。 – JrL 2012-08-09 03:55:10
我知道您在复制2维数组时遇到问题。你有什么麻烦复制它?你尝试了什么不起作用?你在哪里坚持复制?你需要更具体,否则很难提供帮助。 – user1118321 2012-08-09 03:59:03