一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java數據結構實現二維數組與稀疏數組轉換詳解

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

2022-02-19 14:12葉綠體不忘呼吸 Java教程

稀疏數組是用于優化,壓縮具有以下特點的二維數組:當二維數組中的元素大部分相同,有意義的數據元素較少時,可以使用稀疏數組進行簡化,節省存儲空間

基本介紹

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

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

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

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

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

 

應用實例

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

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

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

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();
      }

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

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();
      }

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

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數據結構實現二維數組與稀疏數組轉換詳解的文章就介紹到這了,更多相關Java 稀疏數組內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/m0_46653805/article/details/120680515

延伸 · 閱讀

精彩推薦
  • Java教程Java中的常用輸入輸出語句的操作代碼

    Java中的常用輸入輸出語句的操作代碼

    這篇文章主要介紹了Java中的常用輸入輸出語句的操作代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參...

    Lu_kuan@9282021-08-04
  • Java教程springboot 如何配置多個jndi數據源

    springboot 如何配置多個jndi數據源

    這篇文章主要介紹了springboot 如何配置多個jndi數據源的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教...

    UziNb6472021-10-22
  • Java教程Mybatis-Plus BaseMapper的用法詳解

    Mybatis-Plus BaseMapper的用法詳解

    這篇文章主要介紹了Mybatis-Plus BaseMapper的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    金色的魚兒5662020-08-27
  • Java教程springboot項目攔截器重定向循環問題的解決

    springboot項目攔截器重定向循環問題的解決

    這篇文章主要介紹了springboot項目攔截器重定向循環問題的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教...

    yumi332210642021-12-14
  • Java教程java冒泡排序和選擇排序詳解

    java冒泡排序和選擇排序詳解

    這篇文章主要介紹了java數組算法例題代碼詳解(冒泡排序,選擇排序),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Stars-Nine4682021-09-24
  • Java教程idea中創建多module的maven工程的方法

    idea中創建多module的maven工程的方法

    這篇文章主要介紹了idea中創建多module的maven工程的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    烏龜殼10222021-06-08
  • Java教程spring boot實戰教程之shiro session過期時間詳解

    spring boot實戰教程之shiro session過期時間詳解

    這篇文章主要給大家介紹了關于spring boot實戰教程之shiro session過期時間的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的...

    思與學7942021-01-14
  • Java教程Java命令設計模式詳解

    Java命令設計模式詳解

    這篇文章主要為大家詳細介紹了Java命令設計模式,對命令設計模式進行分析理解,感興趣的小伙伴們可以參考一下 ...

    wangxin03144902020-03-27
主站蜘蛛池模板: 亚洲精品一二三四区 | 国产人成激情视频在线观看 | 亚洲色图欧美色 | 色综合九九| 久久免费国产 | 视频在线欧美 | 国产欧美精品一区二区三区四区 | re99热 | 肉性天堂 | 国产精品林美惠子在线观看 | 免费看隐私美女 | 精品人人做人人爽久久久 | 日本色播 | 欧美色图亚洲天堂 | np小说h| 国产欧美国产综合第一区 | 男人猛进猛出女人下面视频 | 丝瓜视频在线观看污 | 国产精品久久香蕉免费播放 | 色婷婷影院在线视频免费播放 | 18hdxxxx中国| 热久久免费视频 | 狠狠色成人综合网图片区 | 明星ai人脸替换造梦在线播放 | 奇米7777第四色 | 歪歪视频在线播放无遮挡 | 娇妻与老头绿文小说系列 | 天天天天天天天操 | 国产精品视频2021 | 国产福利免费看 | 被黑人同学彻底征服全文小说阅读 | 公交车强校花系列小说 | 99热在线只有精品 | 插入影院| 四虎影视国产精品婷婷 | 亚洲精品久久久992KVTV | 日本连裤袜xxxxx在线视频 | 欧美日韩精品一区二区三区视频在线 | 欧美老妪 | 刺激一区仑乱 | 国产一区二区三区久久精品小说 |