【问题标题】:How do Nodes work in java?节点在java中是如何工作的?
【发布时间】:2013-03-31 01:12:46
【问题描述】:

好的,我有一个名为 CarNode 的类:

public class CarNode {
    private Car car;
    private CarNode node;
}

还有一个拷贝构造函数:

public CarList(CarList list) {
    CarNode element = list.head;
    CarNode node = new CarNode();
    this.head = node;

    while(element != null) {
        node.setCar(element.getCar());
        element = element.getNode();

        if(element != null) {
            node.setNode(new CarNode());
            node = element;
        }
    }
}

我不明白的是element是如何通过element.getNode()获取另一个汽车节点的值的,但是需要写node.setNode()和node.setCar()对于节点...我很困惑...

【问题讨论】:

    标签: java linked-list nodes


    【解决方案1】:

    CarNode 有一个变量 node,它也是一个 CarNode;这意味着 CarNode 对象可以包含对另一个 CarNode 对象的引用。 element 是一个包含对 CarNode 的引用的变量。代码element = element.getNode() 将元素对象内的引用分配给元素引用本身(如果元素内的节点为空,则为空)。

    为了在CarNode 内的节点元素上设置值,您调用setNode(elementReference),从而产生语法node.setNode(new CarNode());

    这是否回答了您的问题?我知道可能很难解释你想问什么,但实际上我们还没有一个非常明确的问题。

    --- 附录

    我会在这里尝试回答您的 cmets,因为更多 cmets 的空间和格式有限。

    我认为您将“对象”与“对象引用”混淆了。您可以将对象视为程序中某处的一块内存,而对象引用则视为该块的地址。考虑以下语句:

    CarNode myCar = new CarNode();
    

    您已经用new CarNode() 创建了一块内存,myCar 现在引用它。如果您现在要执行语句CarNode secondCar = myCar;,您将获得对同一个对象的第二个引用,即同一个内存块。对对象/内存块所做的任何更改都将反映在 myCar 和 secondCar 中。

    您所说的“复制构造函数”也让我感到困惑。我不确定你想做什么。通常,复制构造函数会创建一个或多个对象,这些对象包含与原始对象或一组对象相同的数据。首先,如果原始列表指针为空,这将在第一行抛出 NullPointerException。您创建第一个节点并将其设置为头,这很好,但node = element; 语句是错误的。 node 保存您正在创建的要放入新列表的节点,element 保存原始列表中的元素。

    【讨论】:

    • 我有点困惑,因为这是我第一次操作链表。所以如果我们写 CarNode node = element (在第 4 行),我们基本上创建了列表头部的克隆?但是,如果我们只想更改节点值而不更改汽车值,我们编写:node.setNode(new CarNode());?但是,创建新汽车对象如何将节点设置为 LinkedList 中的另一个节点?最后一行正确吗?
    • 创建一个克隆意味着有两个 CarNode 引用同一个下一个 CarNode 对吧?
    • 我对原始答案添加了更多解释;希望能帮助到你。列表中存在“头部”会使复制列表所需的逻辑复杂化。
    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2012-03-22
    相关资源
    最近更新 更多