JAVA

2011-06-20 11 views
0

で、リスト内のすべてのオブジェクトへのオブジェクトの完全なリストを追加するこんにちは、私は2つのJavaのクラス、GossipNodeを持って、私は各NodeことGossipNodeクラスのすべてのオブジェクトのリストを保持しますし、私がしたいことをしたいですオブジェクトもそのリストを持ちます。私は、次の方法でそれを書き込もうとしました:JAVA

public class Node { 

    private Boolean val = null; 
    private LinkedList<Node> list; 
    static Random rand = new Random(); 

    public Node(LinkedList<Node> list) { 
     this.list=list; 
    } 
    ... the rest of Node functions ... 
} 

Gossip請負業者で:

public class Gossip { 

    private int count; 
    private int n; 

    private LinkedList<Node> list; 

    public Gossip (int n) { 
     this.count = 0; 
     this.n = n; 
     list = new LinkedList<Node>(); 
     for (int i=0; i<n; i++){ 
      list.add(new Node(list)); 
     } 
    } 
    ... the rest of Gossip functions ... 
} 

私はC++に慣れているので、私はそれがここ、これが機能するかどうかをどのように動作するかを確認していませんポインタのように各Nodeは完全なリストを持つか、またはNodeはそれ自身とその前に作成されたNodeのリストしか持たないでしょう。また、プログラムのリストを読むだけで変更する必要はありませんが、興味があります。リスト内のNodeの変更は他のすべてのNodeのリストに影響しますか?

答えて

1

ノードのリストは1つしかなく、すべてのノードにはこの単一のリストへの参照があります。 Nodeコンストラクタでは、割り当てthis.list=list;はオブジェクトのコピーを作成しないため、this.listlistと同じになりますが、両方が(ヒープ上の)オブジェクトへの参照(スタック上)であることを忘れないでください。

したがって、ノードの1つを介してリストを変更すると、他のすべてのノードに変更が表示されます。

1

new LinkedList<Node>();に作成されるリストは、です。後で参照(ポインタのような)によって渡されるので、どこでも同じリストになります。

1

NodeクラスはGossipクラスの外で使用されますか?そうでない場合は、NodeGossipという専用の内部クラスにすることを検討してください。 Nodeインスタンスは、Gossipのリストにアクセスすることができるため、独自の参照を持たなくても簡単になります。これを行うには、リストをfinalと定義する必要があります。

0

java.lang.Objectから派生したjavaの変数/フィールドはすべて「参照」であり、基本的にはC++のポインタとまったく同じです。 (でも、のポインターだけですが、特別な意味を持つC++リファレンスと混同しないでください) つまり、int、floatおよびその他のすべてのプリミティブはポインタ/参照ではなく値です。

関連する問題