Как скопировать значения, а не ссылки, из списка <Integer> в другой список?
А именно, не ссылаясь на один и тот же объект, мне нужно скопировать значения элементов одного списка в другой список. Это списки:
List<Integer> listA = new ArrayList<Integer>();
List<Integer> ListB = new ArrayList<Integer>();
listA = (added some values);
listB = (do what?)...
PS. Я приписываю вопрос начинающим, но я никогда такого не делал.
Ответы
Ответ 1
Вы можете попробовать и посмотреть метод Collections.copy:
public static void copy (List dest, Список src)
Копирует все элементы из одного списка в другой. После операции индекс каждого скопированного элемент в списке адресатов будет идентичен его индексу в исходный список. Список адресатов должен быть как минимум до тех пор, пока исходный список. Если он длиннее, остальные элементы в список адресатов не изменяется. Этот метод работает в линейном времени.
Параметры: dest - список адресатов. src - Список источников.
Примечание. Вышеизложенное должно работать для простых типов данных, таких как целые, однако, если у вас есть свои собственные объекты, которые, в свою очередь, могут ссылаться на другие объекты, вам придется перебирать каждый объект и копировать его отдельно.
Ответ 2
Нет абсолютно никаких оснований делать копию целого. Целое - это неизменный класс. Это означает, что его значение задается при создании экземпляра Integer и никогда не может измениться. Таким образом, ссылка Integer может быть разделена несколькими списками и потоками без страха, потому что никто не может изменить ее значение. Таким образом, ваш вопрос не имеет никакого смысла.
Чтобы создать ArrayList b
, содержащий те же целые числа, что и другой список a
, просто используйте следующий код:
List<Integer> b = new ArrayList<Integer>(a);
Конечно, Integer не будет клонирован, но это хорошо, потому что клонирование их совершенно не нужно.
Ответ 3
Используйте этот метод класса Collections
, чтобы скопировать все элементы ArrayList в другой ArrayList:
Collections.copy(listA, listB);
Ответ 4
Попытайтесь использовать это, в то время как ответы, заданные другими парнями, полностью прекрасны. Но по моему варианту наилучшим способом было бы следующее:
List<Integer> listB = new ArrayList<Integer>(listA);
Ответ 5
ListB.addAll(ListA);
Класс Integer неизменен, поэтому после того, как начальное значение целочисленного объекта было установлено, оно не может быть изменено. Этот вопрос не имеет смысла, потому что вам не нужно беспокоиться о том, что содержимое listB изменяется с помощью методов, действующих на содержимое ListA, потому что объекты Integer неизменяемы.
Ответ 6
У вас не будет большой удачи с помощью clone() и Cloneable - он создаст только мелкую копию. Вы можете использовать что-то вроде этого: http://javatechniques.com/blog/faster-deep-copies-of-java-objects/.
Ответ 7
у меня есть ArrayList в классе A и хочу скопировать все элементы этого класса в LinkedList класса B.
Ответ 8
Попробуйте это.
ListB.addAll(listA);