我在算法课程中浏览了队列实现的代码,并观察了作者使用的dequeue()代码:
private Node first, last;
private class Node {
String item;
Node next;
}
public boolean isEmpty() {
return first == null;
}
// Code segment in doubt
public String dequeue() {
String item = first.item;
first = first.next;
if (isEmpty()) last = null;
return item;
}
在这里,first和last可以理解地分别指向队列中的第一个和最后一个元素。我对作者使用的dequeue()中的代码有点怀疑。因为,他只是在做:
first = first.next;
没有将first.next分配给null。会不会留下会阻碍 JVM 垃圾回收机制的悬空引用(或游荡)?我有点困惑,dequeue()的代码不应该是这样的吗?(我确定在 C/C++ 中代码应该如下所示,但想知道在这种情况下 JAVA 的预期行为)
public String dequeue() {
Node old;
old = first;
first = first.next;
old.next = null;
if (isEmpty()) last = null;
return old.item;
}
如果有人可以向我指出一个资源,该资源通过很好的示例详细介绍了该主题,我也将不胜感激。