簡體   English   中英

閑逛Java的鏈表堆棧實現

[英]Loitering in Java's Linked List Stack implementation

Java的鏈表堆棧實現中是否存在游盪的概念? 在從鏈表中刪除節點之前,是否需要通過將節點的內容設置為null來釋放內存? 還是這樣做不那么好,因為無論如何都不會引用我的舊第一個節點? 謝謝!

public Item pop() {
    if (isEmpty()) 
        throw new StackEmptyException("Stack Empty");
    Item item = first.item;
    first.item = null;
    first = first.next;
    return item;
}

您的第二個語句是正確的-您無需清除節點,Java GC會處理它。

它確實存在,但您不太可能需要擔心它。

在您的情況下,在first = first.next ,Java GC將識別到first指向的舊節點現在不可訪問,因此可以進行收集。

假設我們的Node看起來像這樣

private class Node{
Item item;
Node next;
}

您不必為first.item分配null。 當分配first = first.next;時,first.next是一個Node,這意味着它同時具有Item和下一個Node。

游盪是在不再需要對象時保留對其的引用。 在您的情況下,您可以續訂引用,指向堆棧中的下一個項目。

但是,如果我們使用數組,我們的代碼將是:

public Item pop() {
return arrayItems[--N];
}

在這里,我們從堆棧中返回一個Item,但是指針仍然保留,指向我們從堆棧中獲取的元素。 為了避免閑逛,我們將移除的項目條目設置為null:

public Item pop() {
Item item = arrayItems[--N];
arrayItems[N] = null;
return item;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM