Java - 我们可以将链接节点中的 firstNode 设置为 null 以删除所有条目吗?
Java - Can we set firstNode to null in a linked node to remove all entries?
我有以下代码:
public final class LinkedBag<T> implements BagInterface<T> {
private Node firstNode;
private int numberOfEntries;
public LinkedBag() {
firstNode = null;
numberOfEntries = 0;
}
// Other methods defined
public int getCurrentSize() { }
public boolean isEmpty() { }
public boolean add(T newEntry) { }
public T remove() { }
public boolean remove(T anEntry) { }
public int getFrequencyOf(T anEntry) { }
public boolean contains(T anEntry) { }
public T[] toArray() { }
public void clear() {
while(!isEmpty())
remove();
}
}
要删除所有条目,上述版本的 clear()
方法会释放链中的每个节点,从而使其为空。
但是,要删除所有条目,clear()
方法的以下版本会释放链中的所有节点,从而使其为空吗?
public void clear() {
firstNode = null;
}
是的,会的。不像 C/C++ 我们负责释放之前分配的内存,Java 负责 收集 垃圾 当没有对象的强引用时。
当您将链表的头部 (firstNode
) 设为 null 时,将不会(也不应该)对该节点有任何引用。因此,它有资格进行垃圾收集 (GC)。查看列表中的第二个节点,除了头部之外没有其他链接指向它,因此它也有资格被收集。
扩展这个,整个列表(列表中的所有节点)都可以被GC。
是;除了你还应该记住设置 numberOfEntries = 0;
之外。然后你的链表处于相同的状态,就好像一个新的空链表刚刚被创建(注意你的构造函数做同样的两件事),所以它正确地表示一个空列表。
关于垃圾收集器,这将在幕后自动解除分配已删除的节点对象,因为活动引用不再可以访问它们。为避免垃圾收集语言(如 Java)中的内存泄漏,主要问题是确保您不保留对不再需要的数据的引用。在这种情况下,在设置 firstNode = null;
之后,您的实例根本不保留任何引用,因此没有内存泄漏。
是的,将第一个节点设为空即可。
因为对所有后续节点的引用都将丢失,它们将由垃圾收集器自动释放。
我有以下代码:
public final class LinkedBag<T> implements BagInterface<T> {
private Node firstNode;
private int numberOfEntries;
public LinkedBag() {
firstNode = null;
numberOfEntries = 0;
}
// Other methods defined
public int getCurrentSize() { }
public boolean isEmpty() { }
public boolean add(T newEntry) { }
public T remove() { }
public boolean remove(T anEntry) { }
public int getFrequencyOf(T anEntry) { }
public boolean contains(T anEntry) { }
public T[] toArray() { }
public void clear() {
while(!isEmpty())
remove();
}
}
要删除所有条目,上述版本的 clear()
方法会释放链中的每个节点,从而使其为空。
但是,要删除所有条目,clear()
方法的以下版本会释放链中的所有节点,从而使其为空吗?
public void clear() {
firstNode = null;
}
是的,会的。不像 C/C++ 我们负责释放之前分配的内存,Java 负责 收集 垃圾 当没有对象的强引用时。
当您将链表的头部 (firstNode
) 设为 null 时,将不会(也不应该)对该节点有任何引用。因此,它有资格进行垃圾收集 (GC)。查看列表中的第二个节点,除了头部之外没有其他链接指向它,因此它也有资格被收集。
扩展这个,整个列表(列表中的所有节点)都可以被GC。
是;除了你还应该记住设置 numberOfEntries = 0;
之外。然后你的链表处于相同的状态,就好像一个新的空链表刚刚被创建(注意你的构造函数做同样的两件事),所以它正确地表示一个空列表。
关于垃圾收集器,这将在幕后自动解除分配已删除的节点对象,因为活动引用不再可以访问它们。为避免垃圾收集语言(如 Java)中的内存泄漏,主要问题是确保您不保留对不再需要的数据的引用。在这种情况下,在设置 firstNode = null;
之后,您的实例根本不保留任何引用,因此没有内存泄漏。
是的,将第一个节点设为空即可。 因为对所有后续节点的引用都将丢失,它们将由垃圾收集器自动释放。