2017-02-12 95 views
0

我熟悉java中使用的'this'關鍵字,它用於引用當前對象。下面這段代碼顯示了一個鏈表的節點如何被創建:「object = this」in java

class Node { 
    Node next = null; 
    int data; 

    public Node(int d) { 
     data = d; 
    } 


    void appendToTail(int d) { 
     Node end = new Node(d); 
     Node n = this; 
     while (n.next != null) { 
      n = n.next; 
     } 
     n.next = end; 
    } 
} 

但在這裏我不知道在什麼上面下面的代碼行指出:

Node n = this; 

我敢確定這裏的'this'被引用到當前對象,但是這個對象的頭部,尾部還是LinkedList中的任何其他節點?不知道我的問題是否合理,但非常感謝任何幫助。

+0

'Node n'聲明一個類型爲'Node'的變量'n'。 '= this'用'this'初始化變量'n',它也是'Node'類型。所以,在這條指令之後,'n'和'this'是對同一個對象的兩個引用。頭和尾是無關緊要的。我不明白「LinkedList中的頭部或任何節點是什麼?」手段。 –

+0

@JBNizet,只是改正了錯字。我的意思是我們引用'this'關鍵字,還是僅僅是對一個節點的引用? – Aiguo

+1

當調用appendToTail時,'n'將具有與類(實例)相同的值。在這種情況下,它可以在當前實例上執行while循環。這與其他任何課程沒有什麼不同。 –

回答

3

我假設appendToTail(int d)方法將新創建的節點追加到列表的末尾,而不管它從哪個節點調用。

會發生什麼事情是,必須找到列表的末尾才能將新節點附加到列表的末尾。由於我們知道它被調用的節點在列表中,因此這是一個理想的起點。因此我們選擇起點作爲「這個」節點。但是,這個節點不一定是列表的末尾(實際上它可能在列表中的任何地方),所以我們將它存儲在一個臨時變量Node n = this中,並繼續更改我們的臨時變量,直到它到達列表中的最後一個節點爲止新節點可以被添加。

它相當於從一個列表中的隨機點(this)開始,並從該點移動到結束點,無論它在哪裏。

希望這回答了你的問題。

+0

謝謝@Theo,你解釋的方式對於像我這樣的初學者來說非常瞭解。 – Aiguo

+0

@Aiguo很高興:)很高興我能幫到你。 – TM00

3

我敢肯定,「這個」這裏是參照當前對象

是啊。

但是這個對象的頭部,尾部或LinkedList中的任何其他節點?

這取決於從哪裏調用該方法,或者該列表是否包含this節點。

所有的方法都是爲當前節點分配一個臨時引用,以便它可以迭代。沒有更多信息,你不能說哪個節點。


從評論 - 如果你的頭叫appendToTail(),這將是頭。如果你在尾巴上叫它,這將是尾巴。如果你在中間節點上調用它,這將是該中間節點。

+0

感謝您的幫助!你的回答非常有用:) – Aiguo