删除我创建的 java 中的整个链表
To delete an entire linked list in java which I have created
我想删除我在 java 中创建的整个列表(注意:我没有在 java.util 中使用内部列表)。我已将 head 分配给 null 但我的问题是 java 垃圾收集器是否会处理没有 head 的列表,或者我应该删除每个节点(我的意思是将每个节点设置为 null)将由 [=16= 处理] 垃圾收集器?以下是我的代码,请让我知道哪个是好的,虽然两者都有效,但我仍然想知道。提前致谢。
//first code
public void deleteList()
{
Node n = head;
Node n1;
head = null;
System.out.println("Deleting list");
while(n != null)
{
n1 = n;
n = n.next;
n1 = null;
}
n1 = n;
n1 = null;
System.out.println("List deleted");
}
//second code
public void deleteList()
{
head = null;
}
这取决于您的实施。如果你的节点 class 只是内部的(所以你永远不会 return 一个可能保存它的节点)并且你没有在静态中持有任何节点,那么应该没有到任何节点的路径来自垃圾收集根,GC 将摆脱它们。
所以这可能是正确的,除非您的实施正在做一些不寻常的事情。 (我还假设您没有尾部变量或任何其他引用内部节点的内容,因为它们也需要设置为 null)。
仅当特定对象与其他节点没有任何链接的内部依赖性时,垃圾收集器才会销毁该对象。换句话说,只要对象不再被引用,它们就会被销毁并回收它们的内存。
- 你的第一个代码是正确的,当你与其他节点有内部依赖时,例如
tail
节点。
- 当你与其他节点没有任何依赖关系时,你的第二个是正确的。
我想删除我在 java 中创建的整个列表(注意:我没有在 java.util 中使用内部列表)。我已将 head 分配给 null 但我的问题是 java 垃圾收集器是否会处理没有 head 的列表,或者我应该删除每个节点(我的意思是将每个节点设置为 null)将由 [=16= 处理] 垃圾收集器?以下是我的代码,请让我知道哪个是好的,虽然两者都有效,但我仍然想知道。提前致谢。
//first code
public void deleteList()
{
Node n = head;
Node n1;
head = null;
System.out.println("Deleting list");
while(n != null)
{
n1 = n;
n = n.next;
n1 = null;
}
n1 = n;
n1 = null;
System.out.println("List deleted");
}
//second code
public void deleteList()
{
head = null;
}
这取决于您的实施。如果你的节点 class 只是内部的(所以你永远不会 return 一个可能保存它的节点)并且你没有在静态中持有任何节点,那么应该没有到任何节点的路径来自垃圾收集根,GC 将摆脱它们。
所以这可能是正确的,除非您的实施正在做一些不寻常的事情。 (我还假设您没有尾部变量或任何其他引用内部节点的内容,因为它们也需要设置为 null)。
仅当特定对象与其他节点没有任何链接的内部依赖性时,垃圾收集器才会销毁该对象。换句话说,只要对象不再被引用,它们就会被销毁并回收它们的内存。
- 你的第一个代码是正确的,当你与其他节点有内部依赖时,例如
tail
节点。 - 当你与其他节点没有任何依赖关系时,你的第二个是正确的。