在java中节点是如何工作的?

在java中节点是如何工作的?,java,linked-list,nodes,Java,Linked List,Nodes,好的,我有一个叫做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

好的,我有一个叫做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.getNode()获得另一个car节点的值,但是您需要为节点编写node.setNode()和node.setCar()。。。我很困惑…

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

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

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

---附录

我将尝试在这里回答您的评论,因为更多的评论在空间和格式上都是有限的

我认为你把“对象”和“对象引用”混淆了。您可以将对象视为程序中某个位置的内存块,对象引用视为该块的地址。考虑以下陈述:

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


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

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

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

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

---附录

我将尝试在这里回答您的评论,因为更多的评论在空间和格式上都是有限的

我认为你把“对象”和“对象引用”混淆了。您可以将对象视为程序中某个位置的内存块,对象引用视为该块的地址。考虑以下陈述:

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


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

我有点困惑,因为这是我第一次操纵LinkedList。所以如果我们写CarNode node=element(在第四行),我们基本上创建了列表头的克隆?但是,如果我们只想更改节点值而不更改car值,我们会写:node.setNode(newcarnode());?但是,创建新的汽车对象如何将节点设置为LinkedList中的另一个节点?最后一行是正确的吗?创建一个克隆意味着有两个卡诺涉及相同的下一个卡诺,对吗?我在原始答案中添加了更多的解释;希望能有帮助。在你的列表中出现一个“头”会使复制列表所需的逻辑变得复杂。我有点困惑,因为这是我第一次操作LinkedList。所以如果我们写CarNode node=element(在第四行),我们基本上创建了列表头的克隆?但是,如果我们只想更改节点值而不更改car值,我们会写:node.setNode(newcarnode());?但是,创建新的汽车对象如何将节点设置为LinkedList中的另一个节点?最后一行是正确的吗?创建一个克隆意味着有两个卡诺涉及相同的下一个卡诺,对吗?我在原始答案中添加了更多的解释;希望能有帮助。列表中出现“头”会使复制列表所需的逻辑复杂化。