2013-02-13 4 views
0

Я пытаюсь сделать список прямым копией другого. Будет ли это работать?Что произойдет, если я это сделаю, пытаясь изменить содержимое списка?

list1 = list2 

Не передал бы все содержимое или вообще ничего?

+0

Он не будет копировать объект, которому вы просто присваиваете ссылку на список – Geros

ответ

1

Вы не делаете копию, вы добавляете ссылку. Оба дополнительных ссылки и вставки элементов в список: atom. Процедура является атомарной, если она не расщепляется. Либо это полностью сделано, либо нет.

См. Также следующую тему о том, как правильно клонировать список. Java Collections copy list - I don't understand

Google просветит вас для java clone method.

0

Нет. Это будет делать только list2 контрольная точка в том же списке, который хранится в list1 ссылке. Вы можете использовать copy constructor для копирования ссылок из одного списка в другой, но будьте осторожны, так как это не глубокая копия -> новый список будет содержать точно такие же объекты, которые хранятся в исходном списке. Вот пример

List<String> list1 = new ArrayList<>(); 
list1.add("one"); 
list1.add("two"); 

List<String> list2 = list1;//now list2 will point to the same list as list1 
list2.add("A"); 

//lets print content of list1 
System.out.println(list1); // -> output: [one, two, A] 

//-------------------------------------------------------------- 

//This way you can create separate list that contains same values as list1 
List<String> list3 = new ArrayList(list1); 
list3.add("B"); 

System.out.println(list1); // -> output: [one, two, A] 
System.out.println(list3); // -> output: [one, two, A, B] 
0

Использование прямого назначения в большинстве случаев не является полезным. Это точно так же, как если бы у вас была точная такая же переменная с двумя разными именами, как указывающая на то же самое адрес памяти.

Если вы хотите клонировать список в другой, вы должны использовать copy constructor

например

ArrayList<E> copyList = new ArrayList<E>(originalList); 
Смежные вопросы