мои arraylistS в покрывающем arraylist ведут себя как один и тот же экземпляр.
я манипулирую одним из них с помощью
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;
как вы можете видеть, я делаю все, чтобы почувствовать их как разные экземпляры, но на каждый из них воздействует метод манипуляции.мои переменные называются по-турецки, но я думаю, что вы видите, что к чему
, например
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;
}
публичная статическая пустая копия (ArrayList theList, ArrayList deepCopy) {// deepCopy = new ArrayList (); // ifя не комментирую deepcopy будет пустым для (CumleKelimesi ck: theList) deepCopy.add (ck.clone ());}
вот метод клонирования объекта CumleKelimesi
public CumleKelimesi clone()
{
try
{
return (CumleKelimesi)super.clone();
}
catch( CloneNotSupportedException e )
{
return null;
}
}
, если все они неверны, пожалуйста, посоветуйте другой метод глубокого копирования, и я очень запутался