Дълбоко копие на ArrayList

Имам следния код, който създава плитко копие на 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