небезопасно копировать трехмерный массив с помощью Arraylist? - PullRequest
0 голосов
/ 10 декабря 2018

Интересно, могу ли я скопировать трехмерный массив, используя ArrayList <> () в качестве среднего шага.

Пожалуйста, рассмотрите следующий код:

        /*variable declaration*/
        int[][][] array;
        int[][][] array2;
        ArrayList<int[][][]> list;
        ArrayList<int[][][]> list2;

        /*initialization*/
        array = new int[10][12][14];
        list = new ArrayList<>();

        list.add(array);

        //Construct 'list2', using all the elements contained in 'list'
        list2 = new ArrayList(list);

        array2 = list2.get(0);

Интересноесли массив2 является полной копией ( глубокая копия ) массива или массив2 является ссылкой на массив ( указывает на тот же объект в памяти ).

Также естьэто небезопасная операция?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018
ArrayList<int[][][]> vec2=new ArrayList(vec);

Здесь вы создаете новый экземпляр ArrayList, но и vec, и vec2 ссылаются на один и тот же трехмерный массив.

Вы можете посмотреть на это вопрос .Здесь документация по Java 8 для System.arraycopy

0 голосов
/ 10 декабря 2018

И val, и val2 указывают на один и тот же объект в памяти даже после того, как вы клонировали первый список во второй.

Вы можете доказать это с помощью:

System.out.println(val == val2);

выводит "true"

При этом обратите внимание, что когда вы передаете коллекцию в конструктор копирования ArrayList, все, что он делает, - это просто создает список, содержащий элементы указанной коллекции, поэтому я не уверен, почемуВы ожидали, что это выполнит некоторый тип "глубокого копирования"

...