Я пытаюсь сделать список прямым копией другого. Будет ли это работать?Что произойдет, если я это сделаю, пытаясь изменить содержимое списка?
list1 = list2
Не передал бы все содержимое или вообще ничего?
Я пытаюсь сделать список прямым копией другого. Будет ли это работать?Что произойдет, если я это сделаю, пытаясь изменить содержимое списка?
list1 = list2
Не передал бы все содержимое или вообще ничего?
Вы не делаете копию, вы добавляете ссылку. Оба дополнительных ссылки и вставки элементов в список: atom. Процедура является атомарной, если она не расщепляется. Либо это полностью сделано, либо нет.
См. Также следующую тему о том, как правильно клонировать список. Java Collections copy list - I don't understand
Google просветит вас для java clone method
.
Это не будет. Клонирование объектов в java не так прямолинейно, см. Ссылку How do I copy an object in Java?
Нет. Это будет делать только 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]
Использование прямого назначения в большинстве случаев не является полезным. Это точно так же, как если бы у вас была точная такая же переменная с двумя разными именами, как указывающая на то же самое адрес памяти.
Если вы хотите клонировать список в другой, вы должны использовать copy constructor
например
ArrayList<E> copyList = new ArrayList<E>(originalList);
Он не будет копировать объект, которому вы просто присваиваете ссылку на список – Geros