堆栈中的push(int [] [])复制相同的值Java

时间:2014-08-29 16:50:01

标签: java stack stack-trace

我有一个二维数组和堆栈:

int[][] data = new int[][];
Stack<int[][]> undoList = new Stack<int[][]>(10);

我想在每次更改后添加数据,以便将其保留在撤消列表中:

undoList.push(data);
// some changes to data array
undoList.push(data);
// some changes to data array
undoList.push(data);

那么为什么所有堆栈元素都具有相同的值?

2 个答案:

答案 0 :(得分:2)

您正在对阵列进行更改 - 但您并未将阵列本身置于堆栈中......您正在将引用放入阵列中堆栈。你基本上几次推动相同的参考。如果你想要独立的值,你需要独立的数组。

将参考视为有点像写在纸上的街道地址(纸张通常是变量)。你现在所拥有的是一本书,每页都有相同的街道地址。你可能已经在每页的书写之间画了房子的前门,但这并不意味着我们可以看到所有那些不同的颜色 - 只有一个房子参与其中。如果你想拥有许多不同房屋的街道地址和许多不同颜色的前门,你需要建造许多不同的房屋......

答案 1 :(得分:0)

我用@ Marco13在上面评论中提到的代码复制它来解决它:

深层复制

public static int[][] deepCopyArray(int[][] oldArray){
        int[][] newArray = new int[oldArray.length][];
        for(int i=0; i<oldArray.length; i++)
        {
            newArray[i] = new int[oldArray[i].length];
            for(int j=0; j<oldArray[i].length; j++)
                newArray[i][j] = oldArray[i][j];
        }
        return newArray;
    }