2016-08-28 3 views
0

Я самостоятельно изучаю CS251 из Университета Вандербильта. Работа заключается в том, чтобы написать фасадную оболочку для массива символов и сделать ее доступной. Однако существует метод prune(), и я не понимаю, что он должен делать. Можете ли вы, ребята, пролить свет на то, что может означать этот метод? Поскольку я не хожу в эту школу, я не могу никого просить.Java: метод prune для связанного списка Java

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. 
    } 
+0

Это просто «удаление ссылок» на каждый узел в списке из того, с которым он связан? –

ответ

1

Ответ, который я предоставляю, упрощен, но я надеюсь, что концептуально объясняет, что вам нужно. В Java объекты хранятся в куче. Когда сбор мусора происходит, объекты, которые больше не ссылаются прямо или косвенно на корень сбора мусора, удаляются из кучи.

Если объект по-прежнему ссылается на корень сбора мусора, он не будет собираться с мусором. Все, что нужно сделать, - это установить prev и next values ​​для каждого узла после того, как текущий узел равен null. Это позволит сборщику мусора удалить эти объекты из кучи.

+0

* Если объект по-прежнему ссылается на другой объект, он не будет собирать мусор *: это не упрощение. Это просто неправильно. –

+0

Обновлено, это лучше? Мое намерение состояло в том, чтобы не заходить слишком подробно о GC и просто подчеркивать необходимость разыменования. Дайте мне крик, если он все еще фактически неверен, я его удалю. Спасибо за ответ. –

+0

Ну, это уже не так неправильно, но по-прежнему подразумевается, что для объектов, которые должны быть GCed, необходимо установить значение prev и next node в null. Дело в том, что это совсем не обязательно. Кстати, Java имеет стандартный метод LinkedList, который представляет собой двунаправленный линейный список узлов и не имеет никакого метода prune(). Установка refs на null * может помочь * GC, но это, безусловно, не требуется. –

Смежные вопросы