Вы хотите глубокую копию каждого элемента.Не существует стандартного способа добиться этого, потому что глубокое копирование может включать копирование вложенных ссылок (коллекций) других объектов.Лучший способ сделать это - создать конструктор копирования, у java.lang.Integer он есть!Поэтому я думаю, что вы должны сделать что-то вроде:
List<Integer> buffer = Arrays.asList(new Integer[] { 0, 1, 2, 3, 4 });
List<Integer> b1 = new ArrayList<Integer>();
List<Integer> b2 = new ArrayList<Integer>();
for (Integer element : buffer) {
b1.add(new Integer(element));
b2.add(new Integer(element));
}
Это на самом деле создает две копии, по одной в каждом списке целей.Если один из списков может содержать исходные элементы, просто выполните:
for (Integer element : buffer) {
b1.add(new Integer(element));
b2.add(element);
}
Обратите внимание, что также существует клонируемый интерфейс.Я советую не использовать это, потому что легко делать ошибки с указанными классами, коллекциями и подклассами.Конструктор копирования гораздо проще понять.См. эту страницу для подтверждения.
РЕДАКТИРОВАТЬ: при повторном чтении, возможно, вам не нужны глубокие копии, в этом случае вы можете использовать метод addAll, как описано другими,Это позволит вам создать несколько коллекций одинаковых экземпляров объекта.Затем вы можете изменить содержимое / порядок объектов в одной коллекции, не затрагивая другие коллекции.Однако, если вы измените экземпляр объекта, это, очевидно, будет отражено и во всех других коллекциях.
Кроме того, StephenC справедливо указывает, что мой приведенный выше пример является ненормальным.Я согласен, что никто бы никогда не стал «глубоко копировать» целые числа, как обычно, но это имело бы смысл для пользовательских объектов, содержащих коллекции / ссылки, которые, как я думал, были проблемой здесь.