2009-10-07 24 views
5

Próbuję skopiować zawartość tablicy do innego obiektu. Próbowałem inicjowania new ArrayList obiektów w jeden z następujących sposobówJava - kopiowanie obiektów listy tablicowej

newArrList.addAll(oldArrList); 

i

newArrList = new ArrayList(oldArrList); 

Ale za każdym razem wprowadzać zmiany do jednej z list tablicowych, wartość zmienia się również w drugim ArrayList.

Czy ktoś może mi powiedzieć, jak mogę tego uniknąć.

Dzięki.

Odpowiedz

15

W obiekcie ArrayList będą widoczne tylko odniesienia do obiektów, a nie same obiekty. Kiedy kopiujesz zawartość jednej listy do drugiej, kopiujesz te odniesienia. Oznacza to, że te dwie listy będą odnosić się do tych samych obiektów.

Podejrzewam, że kiedy mówisz, że dokonujesz zmiany na jednej z list, oznacza to, że zmieniasz obiekt na jeden z obiektów o nazwie , do którego odnosi się lista. Tego można się spodziewać.

Jeśli chcesz, aby listy zawierały odniesienia do niezależnych obiektów, musisz wykonać głęboką kopię obiektów podczas ich kopiowania z jednej listy do drugiej. To, jak to działa, zależy od kopiowanych obiektów.

+0

Witam, przez "głęboką kopię", masz na myśli, że obiekty/treści powinny być kopiowane jeden po drugim? –

+0

@ user1282407: Tak. Zamiast utrzymywać odniesienia do istniejących obiektów, tworzysz nowe obiekty o tej samej zawartości (z wyjątkiem niezmiennych obiektów, gdzie nie ma to znaczenia). –

+0

OK. Dzięki! Chyba nie ma prostszego sposobu na kopiowanie zawartości. . –

Powiązane problemy