私は単一リンクリストを持っています
a->b->c->d->e
a、b、c、d および e はノード型のオブジェクトです。以下のコードに示すように、リストをトラバースしながらノードを削除し、その後、削除されたノードをリストの先頭にします。
list.delete(iterator, current);
list.addObjectAtFront(current);
public void delete(ListIterator li, Node node) {
if (li == null) {
throw new NullPointerException();
}
li.next();
if (li.previous() != null) {
li.previous().setNext(node.getNext());
}
}
public void addObjectAtFront(Object o) {
Node newNode = new Node(null, o);
if (this.head != null) {
newNode.setNext(this.head);
this.head = newNode;
} else {
this.head = this.tail = newNode;
}
}
上記のメソッドが呼び出されたときに、現在のアイテムが c であるとします。私は次のことを期待しています
list.delete(iterator, current);
Output: a->b->d->e
list.addObjectAtFront(current);
Output: c->a->b->d->e
2つの相反する考えがあります
削除された後、c は他のノードを指していないため、2 番目のメソッドが呼び出される前にガベージ コレクションを実行できます。
c は、それ自体が null ではなく、データが含まれているため、ガベージ コレクションを実行できません。これは、c を使用する必要がなかった場合を意味します。記憶の中にぶらぶらし続けるだけです。
どちらが正しいですか、それとも完全に間違っているので、オブジェクト参照を新たに理解する必要がありますか?