Java數據結構實現二維數組與稀疏數組轉換詳解

基本介紹

當一個數組中大部分元素為0,或者為同一個值的數組時,可以使用稀疏數組來保存該數組。

稀疏數組的處理方法是:
①記錄數組一共有幾行幾列,有多少個不同的值(0除外)。
②把具有不同值的元素的行列及值記錄在一個小規模的數組中,從而縮小程序的規模。

在這裡插入圖片描述

二維數組轉稀疏數組:
①遍歷原始的二維數組,得到有效數據的個數 sum(除0外不同值)
②根據 sum 創建稀疏數組 sparseArr int[sum+1][3]
③將二維數組的有效數據數據存入到稀疏數組
(稀疏數組的第一行,三列分別記錄二維數組的行、列、有效數據個數)
(後面的行記錄有效數據元素,三列分別記錄行、列、有效數據元素值)

稀疏數組轉二維數組:
①先讀取稀疏數組的第一行,根據第一行的數據,創建原始的二維數組
②再讀取稀疏數組後幾行的數據,並賦給原始的二維數組即可

應用實例

使用稀疏數組,來保留二維數組(棋盤、地圖等等),把稀疏數組存盤,並且可以重新恢復為原來的二維數組數。

如下為一個棋盤通過二維數組轉換為稀疏數組加以存盤和復盤:

在這裡插入圖片描述

1、創建原始二維數組並輸出

		//創建一個原始的二維數組11*11,0表示無子,1表示黑子,2表示藍子
        int[][] chessArr1 = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        //輸出原始二維數組
        for (int[] row : chessArr1){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }

在這裡插入圖片描述

2、將二維數組轉換為稀疏數組

		//將二維數組轉換為稀疏數組
        //先遍歷二維數組,得到非0數據的個數
        int sum = 0;
        for (int i = 0; i < chessArr1.length; i++) {
            for (int j = 0; j < chessArr1[i].length; j++) {
                if (chessArr1[i][j] != 0) sum++;
            }
        }
        //創建對應的稀疏數組並賦值
        int[][] sparseArr = new int[sum + 1][3];
        sparseArr[0][0] = 11;
        sparseArr[0][1] = 11;
        sparseArr[0][2] = sum;
        int count = 0; //用於記錄賦值到第幾行
        for (int i = 0; i < chessArr1.length; i++) {
            for (int j = 0; j < chessArr1[i].length; j++) {
                if (chessArr1[i][j] != 0) {
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                }
            }
        }
        //輸出稀疏數組
        for (int[] row : sparseArr){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }

在這裡插入圖片描述

3、將稀疏數組轉回二維數組

        //將稀疏數組轉換為二維數組
        int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
        //讀取賦值
        for (int i = 1; i < sparseArr.length; i++) {
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        //輸出
        for (int[] row : chessArr2){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }

在這裡插入圖片描述

到此這篇關於Java數據結構實現二維數組與稀疏數組轉換詳解的文章就介紹到這瞭,更多相關Java 稀疏數組內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: