最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)據(jù)結構實現(xiàn)二維數(shù)組與稀疏數(shù)組轉換詳解

 更新時間:2021年10月13日 14:19:57   作者:葉綠體不忘呼吸  
稀疏數(shù)組是用于優(yōu)化,壓縮具有以下特點的二維數(shù)組:當二維數(shù)組中的元素大部分相同,有意義的數(shù)據(jù)元素較少時,可以使用稀疏數(shù)組進行簡化,節(jié)省存儲空間

基本介紹

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

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

在這里插入圖片描述

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

稀疏數(shù)組轉二維數(shù)組:
①先讀取稀疏數(shù)組的第一行,根據(jù)第一行的數(shù)據(jù),創(chuàng)建原始的二維數(shù)組
②再讀取稀疏數(shù)組后幾行的數(shù)據(jù),并賦給原始的二維數(shù)組即可

應用實例

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

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

在這里插入圖片描述

1、創(chuàng)建原始二維數(shù)組并輸出

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

在這里插入圖片描述

2、將二維數(shù)組轉換為稀疏數(shù)組

		//將二維數(shù)組轉換為稀疏數(shù)組
        //先遍歷二維數(shù)組,得到非0數(shù)據(jù)的個數(shù)
        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++;
            }
        }
        //創(chuàng)建對應的稀疏數(shù)組并賦值
        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];
                }
            }
        }
        //輸出稀疏數(shù)組
        for (int[] row : sparseArr){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }

在這里插入圖片描述

3、將稀疏數(shù)組轉回二維數(shù)組

        //將稀疏數(shù)組轉換為二維數(shù)組
        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數(shù)據(jù)結構實現(xiàn)二維數(shù)組與稀疏數(shù)組轉換詳解的文章就介紹到這了,更多相關Java 稀疏數(shù)組內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java FTPClient實現(xiàn)文件上傳下載

    Java FTPClient實現(xiàn)文件上傳下載

    這篇文章主要為大家詳細介紹了Java FTPClient實現(xiàn)文件上傳下載的相關資料,需要的朋友可以參考下
    2016-04-04
  • JdbcTemplate操作數(shù)據(jù)庫的具體方法

    JdbcTemplate操作數(shù)據(jù)庫的具體方法

    這篇文章主要介紹了JdbcTemplate操作數(shù)據(jù)庫的具體操作方法,準備工作需要大家先導入相關的jar包,建個數(shù)據(jù)庫,具體操作方法跟隨小編一起看看吧
    2022-03-03
  • Java+opencv3.2.0實現(xiàn)重映射

    Java+opencv3.2.0實現(xiàn)重映射

    這篇文章主要為大家詳細介紹了Java+opencv3.2.0實現(xiàn)重映射的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 使用Servlet Filter實現(xiàn)系統(tǒng)登錄權限

    使用Servlet Filter實現(xiàn)系統(tǒng)登錄權限

    這篇文章主要為大家詳細介紹了使用Servlet Filter實現(xiàn)系統(tǒng)登錄權限,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Java關鍵字synchronized原理與鎖的狀態(tài)詳解

    Java關鍵字synchronized原理與鎖的狀態(tài)詳解

    在Java當中synchronized關鍵字通常是用來標記一個方法或者代碼塊。本文將通過示例為大家詳細介紹一下Synchronized的各種使用方法,需要的可以參考一下
    2022-08-08
  • Reactor中的onErrorContinue?和?onErrorResume

    Reactor中的onErrorContinue?和?onErrorResume

    這篇文章主要介紹了Reactor中的onErrorContinue?和?onErrorResume,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Java基礎-Java基本數(shù)據(jù)類型

    Java基礎-Java基本數(shù)據(jù)類型

    這篇文章主要介紹了Java基礎-Java基本數(shù)據(jù)類型,變量就是申請內存來存儲值。也就是說,當創(chuàng)建變量的時候,需要在內存中申請空間,下面我們就來對Java基本數(shù)據(jù)類型作簡單的介紹,需要的朋友可以參考一下
    2022-01-01
  • MyBatis綁定錯誤提示BindingException:Invalid bound statement (not found)的解決方法

    MyBatis綁定錯誤提示BindingException:Invalid bound statement (not f

    這篇文章主要介紹了MyBatis綁定錯誤提示BindingException:Invalid bound statement (not found)的解決辦法,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-01-01
  • Java面向對象的封裝你了解嗎

    Java面向對象的封裝你了解嗎

    這篇文章主要為大家詳細介紹了Java面向對象的封裝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java 常量字符串過長的解決方法

    Java 常量字符串過長的解決方法

    這篇文章主要介紹了Java 常量字符串過長的解決方法,常量字符串過長會提示報錯,下面我們就一起來了解一下解決方法
    2021-04-04

最新評論

顺义区| 资溪县| 喀什市| 凤庆县| 屏东市| 洞口县| 隆林| 祁东县| 惠水县| 平邑县| 胶南市| 昌吉市| 错那县| 克拉玛依市| 徐州市| 松阳县| 灵川县| 六安市| 无为县| 库伦旗| 福贡县| 镇远县| 大新县| 长岭县| 赞皇县| 年辖:市辖区| 河南省| 云和县| 田林县| 荃湾区| 南通市| 西贡区| 松阳县| 鹤峰县| 成都市| 洪泽县| 汶上县| 文登市| 漯河市| 宁陵县| 徐闻县|