嗨,我有2个类在Java,Gossip和Node,我希望Gossip将持有Node类的所有对象的列表,我希望每个Node对象也将有该列表。我试着用下面的方式写它:
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 contractor中:
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的列表吗?
发布于 2011-06-20 16:02:32
只有一个节点列表,并且所有节点都有对这个列表的引用。这是因为在节点构造函数中,赋值this.list=list;不会创建对象的副本-它只是使this.list与list相同,但请记住,它们都是(在堆栈上)对对象(在堆上)的引用。
因此,如果您通过其中一个节点更改列表,则所有其他节点都将看到更改。
发布于 2011-06-20 16:02:35
对于一个Gossip,在new LinkedList<Node>();中只创建了一个列表。之后,它被引用(像指针一样)传递,因此它到处都是相同的列表。
发布于 2011-06-20 16:28:21
是否在Gossip类的外部使用Node类?如果不是,那么您可能需要考虑将Node作为Gossip的私有内部类。这将简化事情,因为Node实例可以访问Gossip中的列表,而不必拥有对它的引用。您必须将列表定义为final才能做到这一点。
https://stackoverflow.com/questions/6408277
复制相似问题