私はアルゴリズムのコースでQueueの実装のコードを調べていて、作者が使用した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;
}
また、誰かがこのトピックを詳細に説明し、良い例を示したリソースを教えてくれれば幸いです。