2015-02-21 23 views
5

Wiem, że jest to sprawa trywialna, ale chcę zadać to pytanie. Załóżmy, że mam metodę get, która zwraca ArrayList obiektów. Najpierw musimy zwrócić jego kopię? Jeśli tak, czy musi to być głęboka kopia tablicy ArrayList? Czy nadal musimy wykonać głęboką kopię, gdy obiekty wewnątrz niej są niezmienne? Jeśli użyjemy tego typu konstruktoraGłębokie kopiowanie podczas korzystania z ArrayList w java

ArrayList<T> arr = new ArrayList<>(collection); 

następnie są elementy tablicy kopiowane lub nadal wskazują na starych wartości? Dzięki

Odpowiedz

6

To zależy od Twojego przypadku użycia. Czasami pożądane jest odsłonięcie podstawowej kolekcji, czasami nie.

Jeśli na przykład chcesz zastosować metody zbierania dla swojej klasy, możesz zwrócić podstawową kolekcję (lub zmodyfikowany widok podstawowej kolekcji). Umożliwia to klientom z klasy do zrobienia, na przykład

phoneBook.getPeople().removeIf(Person::isAddressInvalid); 

Jeśli ty nie chcą odsłaniające kolekcję pójdę z

return new ArrayList<>(yourCollection); 

myślę, że to bardzo rzadko zwróć głęboką kopię w metodzie get.

+0

OK, jeśli typem jest String, to mogę go zwrócić w ten sposób: return new ArrayList <> (yourCollection); – user2735714

+2

Absolutnie. Ciągi są niezmienne, dlatego zwrot głębokiej kopii strun jest szczególnie bezcelowy. – aioobe

Powiązane problemy