从ArrayList检索2D数组的问题

时间:2017-11-29 02:53:18

标签: java arrays arraylist

我有一个代表迷宫的2D数组,在循环中,我正在更新这个数组的状态。每次更新后,我都会将2D数组添加到ArrayList中。我的问题是当我尝试访问ArrayList中的任何状态时,它总是给我2D数组的最终状态。当我对2D数组进行更改时,我是否也对存储在ArrayList中的所有先前状态进行了更改?

1 个答案:

答案 0 :(得分:1)

如您所见,编辑2D数组将修改您放在ArrayList中的那些

要停止此操作,请尝试添加带有数据副本的临时2D数组

List<int[][]> list;
int[][] maze;
int[][] temp = new int[maze.length][];
for(int i = 0; i < maze.length; i++)
{
    temp[i] = new int[maze[i].length];
    System.arraycopy(maze[i], 0, temp[i], 0, maze[i].length);
}
list.add(temp);

最好添加一个方法,接受2D数组追加,并将List附加到

private void append(int[][] maze, List<int[][]> list)
{
    //the above code
}

请注意,如果迷宫是一个2D数组的对象,你可能也需要克隆它们(基本/不可变的像int / double / boolean / String就可以了)