gpt4 book ai didi

java:数据元素更改影响 "unrelated"数据结构

转载 作者:行者123 更新时间:2023-12-02 08:15:15 25 4
gpt4 key购买 nike

我遇到一个问题,我从列表(list1)中检索元素,并修改元素中的一个参数,然后将其添加到另一个列表(list2)。当我对list1中的最后一项执行此操作时,有时会修改list2中元素的参数。

这个函数每代都会调用一次,但直到大约第 8 代我才开始看到这种情况发生。它影响 list2 中 2 到 16 个元素。

有什么想法可能是我搞砸了吗?这是我为说明问题而编写的一段代码。问题出现在我检查 count==0 的部分。

    public void sampleCode (List list) {
List differentList = new ArrayList();
Individual element;
Individual differentelement;
int i = 0;
int count = 0;
for(i = 0; i < list.size(); i++) {

element = (Individual) list.get(i) ;


// does some checking to see if this meets criteria
// this is sorta pseudo code
if(probability == true) {
element.setDoMutation(true);
count++;
}
//always add this element to differentList
//even if no changes are made to the element
differentList.add(i,element);
}
//need to make sure one elements has mutation=true;
if(count == 0) {
differentelement = (Individual) list.get((list.size()-1));

//setting this element field changes the contents of
//different list.
differentelement.setDoMutation(true);
differentList.set((list.size()-1), differentelement);
}
}

最佳答案

在 Java 中,变量不保存对象。它保存一个对象引用(即指向对象的指针)。从列表中获取对象并将其放入另一个列表中不会创建该对象的副本。两个列表仅具有指向同一对象的指针。因此,当然,如果您修改对象的内容,两个列表都会修改该对象。

旁注:您应该使用参数化类型(即 List<Individual> 而不是 List ),并避免像在 C 中那样在方法开头声明变量。仅在需要时声明变量。这将使代码更加清晰,并缩小变量的范围。

关于java:数据元素更改影响 "unrelated"数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6564192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com