2013-03-31 54 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

相關問題