Problem przy kopiowaniu ArrayList

0

Dzień dobry,
mam mały problem przy programie. Mam ArrayListę oryginalną i jej kopię. Do pewnej metody przenoszona jest ta oryginalna tam jest kopiowana przy użyciu (ArrayList<int> list = (ArrayList<int>) l.clone();) następnie przetwarzam kopiowaną tablicę w innej metodzie, zmieniam jej zawartość (set(i, j)) lub usuwam jakieś jej elementy. Problemem jest to, że zmienia mi się oryginalna tablica (jej wartości) choć żadna wartość nie jest usunięta. W kopiowanej tablicy są zmieniane wartości a niektóre elementy są usunięte. Jestem początkująca w tych tematach i nie wiem co może być tego przyczyną. Proszę o pomoc

1

Object.clone() jest zwykle płytką kopią, więc np w przypadku kolekcji przetrzymywane referencje pozostają bez zmian. Pokaż kod.

0

Kod jest dosyć duży i zagmatwany więc wiem że nikt by go nie chciał oglądać... :c ```java
public int count(ArrayList<int[]> l) {

	counter = 0;
	
	if (Board.isEmpty())
		counter = (size*size-1)/2;
	else {
		ArrayList<int[]> list = (ArrayList<int[]>) l.clone();
		int[] tmp = Move.findMinMove(list);
		//findMinMove ogólnie wyszukuje jakieś konkretne 2 pkt z list i zawiera indeksy z tablicy
		while(tmp != null) {
			setPoint(tmp[0], list);
			//w setPoint najpierw aktualizuję pkt które znajdują się obok tego podanego (w jeszcze innej metodzie) a potem go usuwa z tablicy już w setPoint
			setPoint(tmp[1], list);
			counter++;
			tmp = Move.findMinMove(list);
		}
	}

	return counter;
}
0
ArrayList<int[]> list = (ArrayList<int[]>) l.clone();

Ten kod robi płytką kopię. Tablice w nowej ArrayLiście będą tymi samymi tablicami co te w starej. Musisz więc odpalać .clone() na tablicach, a nie na samej ArrayLiście. Stwórz nową ArrayListę i wstaw w nią sklonowane tablice.

0

Dziękuje poprawiłam błąd i wszystko dobrze działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1