gpt4 book ai didi

java - 深度复制二维数组

转载 作者:行者123 更新时间:2023-12-02 07:38:34 24 4
gpt4 key购买 nike

我一直在尝试对二维数组进行深度复制,但从未成功。这是我的代码。

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 ?提前致谢。

编辑:

我正在尝试为 Knuth 的跳舞链接算法制作带有 4 个指针的循环双向链表的副本。很难追踪问题出在哪里,但我假设如果原始数组根据 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
}
}

注意:n 应从 1 开始,因为您要从 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 填充。 .

希望这一切有所帮助。

关于java - 深度复制二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11876436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com