Java 3d ArrayList子矩阵修改会更改3d ArrayList的其他子矩阵

Java 3d ArrayList子矩阵修改会更改3d ArrayList的其他子矩阵,java,arraylist,Java,Arraylist,我对Java比较陌生,遇到了一个问题。我有一个3dArrayList,我将此ArrayList的一项发送到一个方法,在该方法中对其进行修改。但这似乎改变了3dArrayList的其他项 因此,我创建了一个矩阵ArrayList,并打印出每个项目 for(int i =0; i<solutionsMatrix.size(); i++) { //System.out.println(i); System.out.println(solutionsMatrix.get(i));

我对Java比较陌生,遇到了一个问题。我有一个3d
ArrayList
,我将此
ArrayList
的一项发送到一个方法,在该方法中对其进行修改。但这似乎改变了3d
ArrayList
的其他项

因此,我创建了一个矩阵
ArrayList
,并打印出每个项目

for(int i =0; i<solutionsMatrix.size(); i++)
{
    //System.out.println(i);
    System.out.println(solutionsMatrix.get(i));
}
问题在于打印出的矩阵(第二个代码块中注释掉的部分)与第一个代码块的打印出矩阵不匹配。我对代码进行了修改,确定方法
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;
}
公共ArrayList镜像矩阵(ArrayList未镜像){
//ij的每个值都需要等于ji,因此只需传输所有非零
ArrayList镜像=新的ArrayList(未镜像);
对于(int i=0;i
我曾尝试在网上搜索答案,但找不到解释(这可能只是因为我不知道合适的术语来描述我的问题)。我希望有人能向我解释为什么会发生这种情况,这样我就可以解决这个问题,并在将来避免它。

ArrayList mirror=new ArrayList(unmirrored);
ArrayList<ArrayList<Integer>> mirror = new ArrayList<ArrayList<Integer>>(unmirrored);
此行不会对其中的所有元素进行深度复制。它确实创建了一个
ArrayList
的新实例,但是它的所有元素都是
ArrayList
的实例,与未镜像的
实例中的实例相同


因此,使用
mirror.get(j).set(i,mirror.get(i).get(j))更改这些元素
会更改相同的实例
mirror.get(j)
unmirrored.get(j)
。也就是说,
mirror.get(j)=unmirrored.get(j)

哦,我不知道。所以假设,如果我的大3d矩阵是由子矩阵构成的,这些子矩阵的生成方式与上面相同。(我没有包括这些,但它们是通过递归尝试不同的组合生成的)。对一个子矩阵的修改可能会改变3d矩阵中的另一个子矩阵,因为它们不是深度副本?
ArrayList<ArrayList<Integer>> mirror = new ArrayList<ArrayList<Integer>>(unmirrored);