Глубокая копия ArrayList

У меня есть следующий код, который создает неглубокую копию массива, однако я хотел бы изменить его, чтобы создать глубокую копию, но я не уверен, как это сделать. Я пытался искать в Интернете, но не мог найти ответ.

Мой код сейчас:

public class Array {

public static void main(String[] args) {
    ArrayList<Double> list1 = new ArrayList<>();
    list1.add(1.5);
    list1.add(2.5);
    list1.add(3.5);

    ArrayList<Double> list2 = (ArrayList<Double>)list1.clone();
    ArrayList<Double> list3 = list1;

    list2.add(4.5);
    list3.remove(1.5);
   System.out.println("list1 is " + list1);
   System.out.println("list2 is " + list2);
   System.out.println("list3 is " + list3);
    }

person user2603112    schedule 11.10.2015    source источник
comment
Возможный дубликат: stackoverflow.com/questions/715650/   -  person burglarhobbit    schedule 11.10.2015
comment
Я устал от этого, но я не могу заставить этот метод работать, не уверен, что я делаю неправильно   -  person user2603112    schedule 11.10.2015
comment
Зачем вам глубокая копия неизменяемого класса??? Что должен демонстрировать ваш фрагмент кода? Это работает, как и ожидалось, и ничего не изменилось, даже если вы сделали глубокую копию этого ArrayList.   -  person fabian    schedule 11.10.2015
comment
Я просто хочу продемонстрировать, что один список является глубоким клоном другого.   -  person user2603112    schedule 11.10.2015


Ответы (2)


Вы можете использовать SerializationUtils Apache Commons.
Чтобы использовать SerializationUtils, класс должен реализовать интерфейс Serializable. Справочник

person mcacorner    schedule 19.09.2018

Глубокая копия будет примерно такой

ArrayList<Double> list1 = new ArrayList<>();
    list1.add(1.5);
    list1.add(2.5);
    list1.add(3.5);

ArrayList<Double> list2 = new ArrayList<Double>();

for (Double d : list1){
list2.add(d);
}
person Vinod Jayachandran    schedule 19.09.2018