Я относительно новичок в Java и сталкиваюсь с проблемой. У меня есть 3d ArrayList
, и я отправляю элемент этого ArrayList
методу, в котором он изменен. Но это, похоже, изменяет другие предметы 3d ArrayList
.Модификация субматрицы Java 3D ArrayList изменяет другие подматрицы 3d ArrayList
Поэтому я создаю матрицу ArrayList<ArrayList<ArrayList<Integer>>>
и распечатываю каждый элемент.
for(int i =0; i<solutionsMatrix.size(); i++)
{
//System.out.println(i);
System.out.println(solutionsMatrix.get(i));
}
Я затем отправлю этот 3d ArrayList
другому методу. Где изменяется каждая подматрица (i). Но при этом каким-то образом модификация матрицы (i) также изменяет другие (не-i) матрицы.
private ArrayList<ArrayList<ArrayList<Integer>>> siftSolutions(ArrayList<ArrayList<ArrayList<Integer>>> solutionsMatrix)
{
for(int n=0; n<solutionsMatrix.size();n++){
//System.out.println(solutionsMatrix.get(n));
ArrayList<ArrayList<Integer>> currentMatrix = mirrorMatrix(solutionsMatrix.get(n));
System.out.println(currentMatrix);
}
Вопрос заключается в том, что распечатано матрица (закомментирована часть во втором блоке коды) не совпадает с распечатанной матрицей первого кодового блока. Я воспользовался кодом и решил, что метод mirrorMatrix
каким-то образом изменяет 3d-матрицу solutionsMatrix
.
public ArrayList<ArrayList<Integer>> mirrorMatrix(ArrayList<ArrayList<Integer>> unmirrored) {
//every value of ij needs to equal ji, thus simply transmit all non-zeros
ArrayList<ArrayList<Integer>> mirror = new ArrayList<ArrayList<Integer>>(unmirrored);
for (int i = 0; i < mirror.size(); i++) {
for (int j = 0; j < mirror.size(); j++) {
if (mirror.get(i).get(j) != 0) {
mirror.get(j).set(i, mirror.get(i).get(j));
}
}
}
return mirror;
}
Я попытался найти ответ в Интернете, но я не мог найти объяснение (которое может быть просто результат, который я не знаю правильную терминологию, чтобы описать мою проблему наилучшим образом). Надеюсь, кто-то может объяснить мне, почему это происходит, поэтому я могу решить проблему и избежать ее в будущем.
О, я этого не знал. Таким образом, гипотетически, если моя большая 3D-матрица была построена из подматриц, которые были сгенерированы так же, как описано выше. (Я не включал это, но они были сгенерированы рекурсивно пробовали разные комбинации). Модификация одной субматрицы может изменить другую субматрицу в 3d-матрице, потому что они не являются глубокими копиями? – lua
Да, они могли. – drvdijk