首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java3D ArrayList subMatrix修改改变了3d ArrayList的其他subMatrices

Java3D ArrayList subMatrix修改改变了3d ArrayList的其他subMatrices
EN

Stack Overflow用户
提问于 2013-07-28 16:48:22
回答 1查看 173关注 0票数 2

我对Java还比较陌生,并且遇到了一个问题。我有一个3d ArrayList,我将这个ArrayList的一个项发送到一个修改它的方法。但这似乎改变了3d ArrayList的其他项目。

因此,我创建一个矩阵ArrayList<ArrayList<ArrayList<Integer>>>并打印出每个项目。

代码语言:javascript
复制
for(int i =0; i<solutionsMatrix.size(); i++)
{
    //System.out.println(i);
    System.out.println(solutionsMatrix.get(i));
}

然后,我将这个3d ArrayList发送到另一个方法。其中每个subMatrix (i)都被修改。但是在这样做的时候,对矩阵(i)的修改也改变了其他(非I)矩阵。

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
}

我试着在网上寻找答案,但我找不到解释(这可能只是一个结果,我不知道正确的术语来描述我的问题)。我希望有人能向我解释为什么会发生这种情况,这样我就可以解决这个问题,并在将来避免它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-28 17:00:34

代码语言:javascript
复制
ArrayList<ArrayList<Integer>> mirror = new ArrayList<ArrayList<Integer>>(unmirrored);

这一行没有对它中的所有元素进行深度复制。它确实创建了一个ArrayList的新实例,但是它的所有元素都是与unmirrored实例中相同的ArrayList<Integer>实例。

因此,用mirror.get(j).set(i, mirror.get(i).get(j));更改这些元素确实会更改相同的实例mirror.get(j)unmirrored.get(j)。即,mirror.get(j) == unmirrored.get(j).

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17910490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档