在java中节点是如何工作的?
好的,我有一个叫做CarNode的类:在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
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中的另一个节点?最后一行是正确的吗?创建一个克隆意味着有两个卡诺涉及相同的下一个卡诺,对吗?我在原始答案中添加了更多的解释;希望能有帮助。列表中出现“头”会使复制列表所需的逻辑复杂化。