检索放入HashMap中的数组

下面的代码是我为一个问题编写的答案,该问题要求将nxn 2D矩阵旋转90度(顺时针),而无需创建新的2D数组。例如


Given input matrix = 

[

  [1,2,3],

  [4,5,6],

  [7,8,9]

],


rotate the input matrix:

[

  [7,4,1],

  [8,5,2],

  [9,6,3]

]

我试图逐行执行此操作,但是必须处理的问题是如果该对索引已更改,该怎么办。因此,如果我尝试将索引对[1,2]分配给[0,1],但是[0,1]之前已经更改过。我想出的解决方案是使用HashMap,将索引对放入数组中作为键,并将原始数字作为值。


这是我的代码


public void rotate(int[][] matrix) {

        int n = matrix.length;

        HashMap<int[], Integer> map = new HashMap<>();

        for(int i = 0; i < n; i++){

            for (int j = 0; j < n; j++){

                if(map.containsKey(new int[]{n-j,i})){

                    matrix[i][j] = map.get(new int[]{n-j, i});

                }

                else{

                    int temp = matrix[i][j];

                    matrix[i][j] = matrix[n-j][i]; 

                    map.put(new int[]{n-j,i}, temp);

                }

            }

        }  


    }

但是,结果表明


if(map.containsKey(new int[]{n-j,i})){

                    matrix[i][j] = map.get(new int[]{n-j, i});

                }

这行代码不是在搜索我之前放入的数组。我知道我每次都在创建一个新数组,但是它如何使containsKey不知道该数组是否包含相同的数字(相同的数组)?谁能帮助我了解为什么在此处使用数组标记索引对在HashMap中不起作用?


蛊毒传说
浏览 126回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java