2013-03-31 49 views
1

好吧,我有一个类叫做CarNode:节点在java中如何工作?

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(),但你需要编写node.setNode()和node.setCar()为节点 ...我很困惑...

回答

1

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

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

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

---编

我将在这里回答你的意见,因为更多的评论在空间和格式的限制。

我觉得你把“对象”和“对象引用”混淆了。您可以将对象视为程序中某处的内存块,并将对象引用作为该块的地址。考虑声明:

CarNode myCar = new CarNode(); 

您已经创建的内存块与new CarNode()myCar现指它。如果您现在要执行语句CarNode secondCar = myCar;,则应该有对同一个对象的第二次引用,即对同一块内存。任何对对象/内存块的更改都会反映在myCar和secondCar中。

你称之为“拷贝构造函数”,也令我感到困惑。我不确定你想要做什么。通常复制构造函数会创建一个或多个包含与原始对象或对象集相同数据的对象。首先,如果原始列表指针为null,则会在第一行中引发NullPointerException。您创建第一个节点并将其设置为首选,这很好,但node = element;声明是错误的。 node包含您要创建的节点以放入新列表中,并且element包含原始列表中的元素。

+0

我有点困惑,因为这是我第一次操作链表。所以如果我们写CarNode node = element(在第四行),我们基本上创建了列表头部的一个克隆?但是如果我们只想改变节点值而不改变汽车值,我们写:node.setNode(new CarNode());?但是如何创建一个新的汽车对象将该节点设置为LinkedList中的另一个节点?并且最后一行是正确的? – user2089523

+0

创建一个克隆意味着有两个CarNode指向相同的下一个CarNodes对吗? – user2089523

+0

我已经给原始答案增加了一些解释。希望能帮助到你。列表中存在“头部”会使复制列表所需的逻辑复杂化。 – arcy

相关问题