2016-08-28 3 views
0

私はVanderbilt UniversityのCS251を独自に学習しています。この作業は、文字配列のファサードラッパーを作成し、サイズを変更できるようにすることです。しかし、方法がありますprune()と私はそれが何をすべきか理解していません。あなたは、この方法が何を意味するかもしれないかについて、皆さんに何らかの光を当てることができますか私はその学校に行かないので、誰にも尋ねることはできません。ここJava: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値をnullに設定する必要があります。これにより、ガベージコレクタは、これらのオブジェクトをヒープから削除できます。

+0

*オブジェクトがまだ別のオブジェクトによって参照されている場合、ガベージコレクションされません*:これは単純化ではありません。それは間違っている。 –

+0

更新されましたか?私の意図は、GCに関する詳細があまりにも多くなることを避け、逆参照の必要性を強調することでした。本当に間違っている場合は、私はそれを削除します。フィードバックをお寄せいただきありがとうございます。 –

+0

さて、それはもはや間違っていませんが、オブジェクトをGCするためには、前ノードと次ノードをnullに設定する必要があります。実際、それは全く必要ではないということです。ところで、Javaには標準のLinkedListメソッドがあります。これはノードの双方向リストであり、prune()メソッドはありません。 refsをnullに設定すると* GCに役立つかもしれませんが、必ずしも必要ではありません。 –