请问游荡的概念存在于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
现在可达等都可以回收。
比方说,我们的节点看起来是这样的
private class Node{
Item item;
Node next;
}
您不必指定为null,first.item。当分配第一= first.next ;,所述first.next是节点,这意味着它有两个项和下一个节点。
游荡是,保持对一个对象的参照时,不再需要它。在你的情况更新参考,指向在堆栈中的下一个项目。
但是,如果我们将使用数组,我们的代码如下:
public Item pop() {
return arrayItems[--N];
}
在这里,我们从栈中返回一个项目,但指针保持,指着我们把堆栈的元素。为了避免游荡,我们集合中删除项条目为空:
public Item pop() {
Item item = arrayItems[--N];
arrayItems[N] = null;
return item;
}