首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JAVA中将对象的完整列表添加到列表中的每个对象

在JAVA中将对象的完整列表添加到列表中的每个对象
EN

Stack Overflow用户
提问于 2011-06-20 15:57:15
回答 4查看 127关注 0票数 0

嗨,我有2个类在Java,GossipNode,我希望Gossip将持有Node类的所有对象的列表,我希望每个Node对象也将有该列表。我试着用下面的方式写它:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
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的列表吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-20 16:02:32

只有一个节点列表,并且所有节点都有对这个列表的引用。这是因为在节点构造函数中,赋值this.list=list;不会创建对象的副本-它只是使this.listlist相同,但请记住,它们都是(在堆栈上)对对象(在堆上)的引用。

因此,如果您通过其中一个节点更改列表,则所有其他节点都将看到更改。

票数 1
EN

Stack Overflow用户

发布于 2011-06-20 16:02:35

对于一个Gossip,在new LinkedList<Node>();中只创建了一个列表。之后,它被引用(像指针一样)传递,因此它到处都是相同的列表。

票数 1
EN

Stack Overflow用户

发布于 2011-06-20 16:28:21

是否在Gossip类的外部使用Node类?如果不是,那么您可能需要考虑将Node作为Gossip的私有内部类。这将简化事情,因为Node实例可以访问Gossip中的列表,而不必拥有对它的引用。您必须将列表定义为final才能做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6408277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档