对象的浅表副本无法正确更新原始对象

我想对图形建模,并这样做:

  • 我有一个类A,其中包含A实例的LinkedList并具有关联的setter方法:
class A {
    private LinkedList<A> list;
    [...]
    public setList(LinkedList<A> l) {
        this.list = l;
    }
}
  • 在另一个Neta类中,我有一个genCon方法,该方法采用A实例的LinkedList,然后将其list属性设置为rlist的随机子列表:
static void genCon (LinkedList<A> rlist) {
    for(int i=0; i<rlist.size(); i++) {
        A temp = rlist.get(i);
        LinkedList<A> slist = new LinkedList<A>(rlist.subList(0,rlist.size()));
        temp.setList(slist);
    }
}

然后在main中调用genCon(rlist),但是rlist的所有对象应该都初始化了它们的列表(并且等于rlist的改组版本),其中一些似乎是空的,没有一致的模式(即,不是每个n或可重复模式),但完全是随机的。

起初我以为A temp = rlist.get(i)并没有给我索引i的对象的浅表副本,但是使用==进行的身份检查返回true,因此,如果我没有记错的话,这意味着这两个变量具有相同的引用,那不应该是导致问题的原因吗? 然后,我认为这可能是一个优化问题,也许eclispe尝试并行执行操作,并且以某种方式随机破坏了初始化? 我试图逐步进行处理,但是似乎找不到我搞砸的地方。 我想念什么?

编辑:

主要功能如下:

public static void main(String[] args) {
    LinkedList<A> a_list = generateAList(20);
    genCon(a_list);

    for(int i=0; i<a_list.size(); i++) {
        System.out.println(a_list.get(i).toString());
    }
}

a_list已正确初始化。尝试打印对象时,在以下循环中发生问题。 因为它仅用于测试,所以main与genCon()atm位于同一类。

generateAList()看起来像这样:

static public LinkedList<A> generateAList(int n) {
    LinkedList<A> a_list = new LinkedList<A>();

    for(int i=0; i<n; i++) {
        ap_list.add(A.rand()); // A.rand() is just a static function that return an instance of A with randomly set values and an unitialized list.
    }

    return ap_list;
}
wanlili3646 回答:对象的浅表副本无法正确更新原始对象

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3165538.html

大家都在问