()"-6ren"> ()"-我的 arraylistS 在覆盖数组列表中的行为类似于同一个实例。 我用其中一个来操作 i=0; manupulate((ArrayList)theCoveringRootArrayList.get-6ren">
gpt4 book ai didi

java - arraylistS 的 arraylist 中的 arraylistS 的行为类似于同一个实例,尽管有 "new Arraylist()"

转载 作者:行者123 更新时间:2023-12-02 00:41:28 29 4
gpt4 key购买 nike

我的 arraylistS 在覆盖数组列表中的行为类似于同一个实例。

我用其中一个来操作

i=0; manupulate((ArrayList)theCoveringRootArrayList.get(i));

,所有子数组列表都已受到操作的影响。

我做了功课,在谷歌上搜索了一下,但在谷歌中说:“用 myvar=new myobject() 创建新实例”

我已经这样做了。

这是代码:

    ArrayList denemeKombinasyonuCumleKelimesiListesiListesi=new ArrayList();

int i=0,j=0;
ArrayList<CumleKelimesi> geciciListe=new ArrayList<CumleKelimesi>();
while(matris[0][j]!=-1){
geciciListe=new ArrayList<CumleKelimesi>();
i=0;
while(i<cumle.cumleKelimeleri.size()){
if(!cumle.cumleKelimeleri.get(i).noktalamaMi){
geciciListe.add(cumle.cumleKelimeleri.get(i).olasilikliKelimeler.get(matris[i][j]));
}else{
geciciListe.add(cumle.cumleKelimeleri.get(i));
}
i++;
}
denemeKombinasyonuCumleKelimesiListesiListesi.add(geciciListe);
j++;

}
i=0;
int enAzAyristirilamayan=9999;
int enAzAyristirilamayanliListeninYeri=0;
while(i<denemeKombinasyonuCumleKelimesiListesiListesi.size()){
ArrayList<CumleKelimesi> cka=new ArrayList<CumleKelimesi>();
cka.addAll((ArrayList)denemeKombinasyonuCumleKelimesiListesiListesi.get(i));
int ayristirilamayanSayisi=Ayristirici.ayristirmaAlgoritmasi(cka);
if(ayristirilamayanSayisi<enAzAyristirilamayan){
enAzAyristirilamayan=ayristirilamayanSayisi;
enAzAyristirilamayanliListeninYeri=i;
}
denemeKombinasyonuCumleKelimesiListesiListesi.set(i, cka);
i++;
}
geciciListe=(ArrayList)denemeKombinasyonuCumleKelimesiListesiListesi.get(enAzAyristirilamayanliListeninYeri);

return geciciListe;

正如你所看到的,我尽一切努力让它们感觉它们是不同的实例,但是,每个实例都受到 manupulate 方法的影响。我的变量名称是土耳其语,但我想你可以看到什么是什么

例如

geciciliste=临时列表

denemeKombinasyonuCumleKelimesiListesiListesi=将列表封装为数组列表的数组列表可能是什么问题提前致谢

<小时/>

----------------编辑------------------------------ ---------------------------------------

这是我对深度复制任务的尝试:

    ArrayList<ArrayList<CumleKelimesi>> denemeKombinasyonuCumleKelimesiListesiListesi=new       ArrayList<ArrayList<CumleKelimesi>>();

int i=0,j=0;
ArrayList<CumleKelimesi> geciciListe=new ArrayList<CumleKelimesi>();
while(matris[0][j]!=-1){
geciciListe=new ArrayList<CumleKelimesi>();
i=0;
while(i<cumle.cumleKelimeleri.size()){
if(!cumle.cumleKelimeleri.get(i).noktalamaMi){
geciciListe.add(cumle.cumleKelimeleri.get(i).olasilikliKelimeler.get(matris[i][j]));
}else{
geciciListe.add(cumle.cumleKelimeleri.get(i));
}
i++;
}
denemeKombinasyonuCumleKelimesiListesiListesi.add(geciciListe);
j++;

}
i=0;
int enAzAyristirilamayan=9999;
int enAzAyristirilamayanliListeninYeri=0;
while(i<denemeKombinasyonuCumleKelimesiListesiListesi.size()){
ArrayList<CumleKelimesi> cka=new ArrayList<CumleKelimesi>();
MetindenGrafOlusturma.copy(denemeKombinasyonuCumleKelimesiListesiListesi.get(i),cka);
int ayristirilamayanSayisi=Ayristirici.ayristirmaAlgoritmasi(cka);
if(ayristirilamayanSayisi<enAzAyristirilamayan){
enAzAyristirilamayan=ayristirilamayanSayisi;
enAzAyristirilamayanliListeninYeri=i;
}
denemeKombinasyonuCumleKelimesiListesiListesi.set(i, cka);
i++;
}
geciciListe=(ArrayList)denemeKombinasyonuCumleKelimesiListesiListesi.get(enAzAyristirilamayanliListeninYeri);

return geciciListe;

}

public static void copy(ArrayList theList,ArrayList deepCopy) { //deepCopy = new ArrayList();//如果我不注释deepcopy将为空 对于(CumleKelimesi ck:theList) deepCopy.add(ck.clone()); }

这里是 CumleKelimesi 对象的克隆方法

     public CumleKelimesi clone()
{
try
{
return (CumleKelimesi)super.clone();
}
catch( CloneNotSupportedException e )
{
return null;
}
}

如果所有这些都是错误的,请建议不同的深复制方法我很困惑

最佳答案

当您说以下内容时,您正在制作列表的浅拷贝:a=(ArrayList)theCoveringRootArraylist.get(i);

CoveringRootArraylist 中的第 i 个索引和列表变量“a”指向同一个列表,因此当您“manupulate(a)”时,两者都会被修改。

尝试进行深层复制,然后进行更改。

关于java - arraylistS 的 arraylist 中的 arraylistS 的行为类似于同一个实例,尽管有 "new Arraylist<MyObj>()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6251687/

29 4 0