2012-06-30 10 views
18

Mam poniżej kod Java.Dodawanie jednej listy do innej listy w java?

List<SomePojo> list = new ArrayList<SomePojo>(); 
//add 100 SomePojo objects to list. 

Teraz lista zawiera 100 obiektów.

jeśli utworzyć jedną instancję, jak poniżej:

List<SomePojo> anotherList = new ArrayList<SomePojo>(); 
anotherList .addAll(list); 

Dzięki!

+2

pamiętać, że ja wycofał pierwotne pytanie, ponieważ Twoje zmiany pominęły cały punkt samego pytania. –

+4

Problem polega na tym, że to już nie jest pytanie i nie ma żadnego sensu;) –

+0

Proszę, to pytanie wymaga edycji, to nie ma sensu. – Ogbe

Odpowiedz

24

Obiekt znajduje się tylko jeden raz w pamięci. Twój pierwszy dodatek do list po prostu dodaje referencje do obiektu.

również doda odniesienia. Więc wciąż tylko 100 obiektów w pamięci.

Po zmianie list przez dodanie/usunięcie elementów, anotherList nie zostanie zmieniony. Ale jeśli zmienisz dowolny obiekt w list, to jego treść również zostanie zmieniona podczas uzyskiwania dostępu do niego z poziomu anotherList, ponieważ na obu listach wskazuje się to samo odwołanie.

0

... Gdy nie u Wykonaliśmy rachunku anotherList.addAll (lista), a potem, jeśli u zmienić niektóre dane lista nie przeprowadza się do innej listy

+0

Twoja odpowiedź jest niejednoznaczna. – Joset

9

100, to będzie posiadać te same referencje. Dlatego jeśli wprowadzisz zmianę do określonego obiektu w list, wpłynie to na ten sam obiekt w anotherList.

Dodawanie lub usuwanie obiektów z dowolnej listy nie ma wpływu na inne.

list i anotherList są dwiema różnymi instancjami, zawierają tylko te same referencje obiektów "wewnątrz".

+0

dzięki za odpowiedź ur. jeśli dodaję/usuwam dowolny obiekt z listy, czy ta sama zmiana jest odzwierciedlana na innej liście? – user1016403

+2

nie będzie to miało wpływu. list i anotherList są dwoma różnymi instancjami, posiadają tylko te same referencje obiektów "wewnątrz". – Joset

4

Cytując oficjalny javadoc z List.addAll:

Appends all of the elements in the specified collection to the end of 
this list, in the order that they are returned by the specified 
collection's iterator (optional operation). The behavior of this 
operation is undefined if the specified collection is modified while 
the operation is in progress. (Note that this will occur if the 
specified collection is this list, and it's nonempty.) 

Tak będzie skopiować odniesienia do obiektów w list do anotherList. Każda metoda, która nie działa na przywoływanych obiektach o numerze anotherList (np. Usuwanie, dodawanie, sortowanie) jest lokalna, dlatego nie będzie miała wpływu na list.

2

Fragment API Java dla AddAll (kolekcja c) w interfejsie Listasee here

„Dołącza wszystkie elementy w określonej kolekcji na końcu tej listy, w kolejności że są zwracane przez iterator określonej kolekcji (operacja opcjonalna). "

Ty będziesz mieć jak najwięcej przedmiotów, jak masz na obu listach - liczbę obiektów w swoim pierwszym liście plus liczbę obiektów, które masz w swoim drugim liście - w przypadku 100.

Powiązane problemy