在创建我自己的单链表类时,我注意到 push 和 pop 函数似乎按预期工作。虽然在pop_back()
我设置的方法headTmp = null
中表明这不再需要。此外,这可能会破坏对 tmp 的分配,因为它已分配给 headTmp.data 吗?此分配是对 headTmp.data 的副本还是引用分配?我不确定 Java 是否会在函数的参数之外进行复制。
在 C++ 中,分配将是一个副本,然后我将有一个指针并删除 headTmp 项。我是否需要headTmp = null
在此代码中进行处理,或者这对数据的分配没有任何帮助或可能会损害数据的分配,并且只是设置了prev.next = null
足够的内容,GC 是否会处理此清理工作?我是否应该考虑类似于 C++ 中使用引用计数的共享指针的垃圾收集,这样当没有任何东西指向该对象时,它会被清除?我习惯清理自己的垃圾
package dynamiclist;
public class LinkedList<T>
{
public T pop_back()
{
Node<T> prev = null;
Node<T> headTmp = head;
while ( headTmp.next != null)
{
prev = headTmp;
headTmp = headTmp.next;
}
T tmp = headTmp.data;
headTmp = null; // does this help in GC at all? Does it effect previous assignment of tmp?
prev.next = null;
return tmp;
}
public void push_back(T t)
{
if (head == null)
{
head = new Node<T>(t);
return;
}
Node<T> headTmp = head;
while (headTmp.next != null)
{
headTmp= headTmp.next;
}
headTmp.next = new Node<T>(t);
headTmp.next.next=null;
}
public void printList()
{
Node<T> headTmp = head;
while ( headTmp!=null)
{
headTmp.printNode();
headTmp = headTmp.next;
}
System.out.println();
}
private Node<T> head;
}