Java:Java链表的prune方法

时间:2016-08-28 19:02:33

标签: java

我独立研究范德比尔特大学的CS251。我们的工作是为字符数组编写一个外观包装器,并使其具有可扩展性。但是,有一种方法 prune(),我不明白它应该做什么。你们能否说明这种方法的意义?既然,我不去那所学校,我不能问任何人。

https://github.com/iamparas/CS251/blob/master/assignments/assignment1/ugrad/src/vandy/cs251/CharList.java

这里是该Java代码的节点。

private class Node {
    /**
     * Value stored in the Node.
     */
// TODO - you fill in here

    /**
     * Reference to the next node in the list.
     */
// TODO - you fill in here

    /**
     * Default constructor (no op).
     */
    Node() {
    }

    /**
     * Construct a Node from a @a prev Node.
     */
    Node(Node prev) {
        // TODO - you fill in here
    }

    /**
     * Construct a Node from a @a value and a @a prev Node.
     */
    Node(char value, Node prev) {
        // TODO - you fill in here
    }

    /**
     * Ensure all subsequent nodes are properly deallocated.
     */
    void prune() {
        // TODO - you fill in here
        // Leaving the list fully linked could *potentially* cause
        // a pathological performance issue for the garbage
        // collector.
    }

1 个答案:

答案 0 :(得分:1)

我提供的答案是简化的,但我希望从概念上解释你需要什么。在Java中,对象保留在堆上。当垃圾收集发生时,垃圾收集根不再直接或间接引用的对象将从堆中删除。

如果垃圾收集根仍然引用了对象,则不会对其进行垃圾回收。所有prune方法需要做的是将当前节点之后的每个节点的prev和next值设置为null。这将允许垃圾收集器从堆中删除这些对象。