gpt4 book ai didi

Java 与。 C++/C 树实现,幕后发生了什么

转载 作者:太空狗 更新时间:2023-10-29 19:59:14 25 4
gpt4 key购买 nike

所以我一直在审查我的数据结构,但我一直不明白与具有指针的语言相比,具有指针的 java 实现最终如何实际工作。

Java 类中的树或列表是用节点类实现的,该节点类具有其他节点类作为元素,如果它是树,则表示左节点和右节点。

public class Node {
private int data;
private Node left;
private Node right;
...
}

编译器是否知道只使用指针,或者所有这些都是按值完成的,并且我从我的树节点中保存了相同值的许多不同版本?

最佳答案

我发现在这件事上的困惑通常归结为不理解对象在 Java 中是如何传递的。

使用下面代码中演示的 updateNodeData,您将按值传递 referencecopy 作为第一个参数。然后将修改该节点的数据(假设数据是公共(public))。

同样,nodeToBeChanged 的​​ leftNode 现在也将引用与传入 newLeftNode 的节点相同的节点。不会克隆/创建具有复制值的新节点。

public void updateNodeData(Node node, int newValue){
node.data = newValue;
}

public void setLeftNode(Node nodeToBeChanged, Node newLeftNode)
{
nodeToBeChanged.leftNode = newLeftNode;
}

但是,经常令人困惑的是,因为它是按值传递的引用的拷贝,所以您不能交换两个节点,如下所示。您将交换拷贝,而不是实际引用。

public void swap(Node node1, Node node2)
{
Node tmpNode = node1;
arg1 = arg2;
arg2 = tmpNode;
}

现在回到最初的问题。如果要使用像这样的节点来实现节点树:

public class Node {
private int data;
private Node left;
private Node right;
...
}

不会有同一个节点的不同克隆到处都是浪费内存。它只是一长串节点和引用。

关于Java 与。 C++/C 树实现,幕后发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14487083/

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