我有下面的代码:
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在没有对对象的强引用的情况下会负责collecting
是;除了您还应该记住也要设置numberOfEntries = 0;
。然后,您的链表处于与刚刚创建一个新的空链表相同的状态(请注意,您的构造函数执行相同的两件事),因此它正确地表示了一个空表。
是,将第一个节点设置为空将起作用。对所有后续节点的引用将丢失,它们将由垃圾收集器自动释放。