2012-06-30 2 views
18

У меня есть код java.Добавление одного списка в другой список в java?

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

В настоящее время в списке 100 объектов.

Если я создать еще один экземпляр, как показано ниже:

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

Спасибо! не

+2

виду, что я отбросил оригинальный вопрос, потому что ваши правки пропустили всю суть самого вопроса. –

+4

Проблема в том, что это уже не вопрос, и не имеет никакого смысла вообще;) –

+0

, пожалуйста, этот вопрос нуждается в редактировании, это не имеет смысла. – Ogbe

ответ

24

Объект находится только один раз в памяти. Ваше первое дополнение к list просто добавляет ссылки на объекты.

anotherList.addAll также просто добавит ссылки. Так что все еще только 100 объектов в памяти.

Если вы меняете list путем добавления/удаления элементов, anotherList не будет изменен. Но если вы измените какой-либо объект в list, тогда его содержимое будет также изменено при доступе к нему с anotherList, так как в обоих списках указывается одна и та же ссылка.

0

нет ... После того, как у выполнило заявление anotherList.addAll (список), и после этого, если и изменить некоторые данные списка не несет в другой список

+0

Ваш ответ неоднозначен. – Joset

9

100, он будет держать ту же ссылку. Поэтому, если вы внесете изменения в конкретный объект в list, он повлияет на тот же объект в anotherList.

Добавление или удаление объектов в любом из списков не повлияет на другие.

list и anotherList - это два разных экземпляра, они содержат только те же ссылки объектов «внутри».

+0

спасибо за ответ ур. если я добавляю/удаляю любой объект в списке, то одно и то же изменение отражается в другом списке? – user1016403

+2

нет, это не повлияет. list и anotherList - это два разных экземпляра, они содержат только те же ссылки на объекты «внутри». – Joset

4

со ссылкой на официальный Javadoc из 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.) 

Таким образом, вы будете копировать ссылки из объектов в list к anotherList. Любой метод, который не работает с ссылочными объектами anotherList (например, удаление, добавление, сортировка), является локальным для него и поэтому не будет влиять на list.

2

Отрывок из Java API для addAll (сбор с) в интерфейсе Списокsee here

«Дописывает все элементы в указанной коллекции в конце этого списка, в порядке что они возвращаются итератором указанной коллекции (дополнительная операция) ».

Вы вы будете иметь столько объект, как у вас есть в обоих списках - количество объектов в первом списке плюс количество объектов, которые есть в вашем втором списке - в вашем случае 100.

Смежные вопросы