日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈:稀疏数组与二维数组之间的转换

發布時間:2024/4/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈:稀疏数组与二维数组之间的转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記

二維數組簡介

二維數組本質上是以數組作為數組元素的數組,即“數組的數組”,類型說明符 數組名[常量表達式][常量表達式]。二維數組又稱為矩陣,行列數相等的矩陣稱為方陣。對稱矩陣a[i][j] = a[j][i],對角矩陣:n階方陣主對角線外都是零元素。

二維數組

二維數組類似于五子棋的棋盤

引入稀疏數組

假如我們有二維數組,需要保存,發現上面的數據有很多數據是無效的數據,有效數據只有2個
這樣保存下來會有很多的無效數據,假如無效數據過于龐大,會大大的影響網絡傳輸效率等,所以就可以通過稀疏數組來讓無效的數據消失.

代碼解析(詳細解釋在代碼注釋中,二維數組轉稀疏數組轉二維數組)

package com.fs.demo01; /* 稀疏數組 將原本二維數組多余的數據去除,保留原本的有效數據,降低數據的大小,提升效率*/ public class SparseArray {public static void main(String[] args) {//創建二維數組,來表示棋盤//0表示棋盤的點,1表示黑子,2表示藍子int doubleArray[][] = new int[11][11];//給第2排的第3列放上一個黑子(行列從索引0開始)doubleArray[1][2] = 1;//給第三排的第4列放上一個藍子doubleArray[2][3] = 2;//輸出一下二維數組//循環遍歷兩次,因為二維數組是兩個一維數組合成System.out.println("原始二維數組棋盤----------------------------");for (int[] ints : doubleArray) {for (int anInt : ints) {//排版一下System.out.printf("\t"+anInt);}//換行System.out.println();}System.out.println("將二維數組轉成稀疏數組------------------------");//先遍歷二維數組中數據非0 的個數//定義一個變量保存非0的個數int sum = 0;for (int i = 0; i < doubleArray.length; i++) {int[] ints = doubleArray[i];for (int j = 0; j < ints.length; j++) {int anInt = ints[j];if (anInt!=0){sum++;}}}System.out.println("二維數組中已經存放的棋子個數為:"+sum);/*** 對應我們上面的二維數組* 稀疏數組格式* 對應二維數組的行 對應二維數組的列 對應的值* 第一行是二維數組的格式 11(二維數組行) 11(二維數組列) 2(有效值)* 后面的就是對應二維數組的 1 2 1* 實際坐標 2 3 2*** 打印結果:* 11 11 2* 1 2 1* 2 3 2*///創建稀疏數組 行為sum+1,因為有一個二維數據數據行 列永遠是三int sparseArray[][] = new int[sum+1][3];//給稀疏數組的行列復制sparseArray[0][0] = doubleArray.length;//第一行第一列sparseArray[0][1] = doubleArray.length;//第一行第二列sparseArray[0][2] = sum;//第一行第三列//遍歷二維數組,當二維數組有值得時候記錄坐標,將值賦值給稀疏數組//定義一個變量來存儲當前是洗漱數組的第幾行int row = 1;//稀疏數組從第二行開始,因為第1行存放了二維數組的數據for (int i = 0; i < doubleArray.length; i++) {int[] ints = doubleArray[i];for (int j = 0; j < ints.length; j++) {int anInt = ints[j];if (anInt!=0){sparseArray[row][0] = i;//row行的第1列存檔有數據的行sparseArray[row][1] = j;//row行的第二列存放二維數組有數據的列sparseArray[row][2] = doubleArray[i][j];//row行的第三列存放有數據的二維數組本身的值row++;//存放完加一行}}}//循環遍歷打印一下稀疏數組for (int[] ints : sparseArray) {for (int anInt : ints) {//排版一下System.out.printf("\t"+anInt);}//換行System.out.println();}System.out.println("將稀疏數組恢復成二維數組-----------------------");/*** 在將稀疏數組恢復成二維數組* 1.先讀取稀疏數組的第一行數據,根據第一行數據恢復原來的二維數組平面* 2.然后讀取稀疏數組的第二行后的數據,第二行的第一列就是有效值在二維數組的行,第二行的第二列就是有效值在二維數組的列,第二行的第三列就是有效值**///創建恢復的二維數組.sparseArray[0][1]==11 sparseArray[0][2]==11int doubleArrayNew[][] = new int[sparseArray[0][0]][sparseArray[0][1]];//循環稀疏數組,從第二行開始,將行列賦值在新的二維數組中for (int i = 1; i < sparseArray.length; i++) {/*對應稀疏數組的形態來看11 11 21 2 12 3 2循環第一次的時候sparseArray[i][0] = 1 sparseArray[i][1]=2 sparseArray[i][2]=1循環第二次的時候sparseArray[i][0] = 2 sparseArray[i][1]=3 sparseArray[i][2]=2*/doubleArrayNew[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}//打印一下新的二維數組,看打印結果是否和原來的一樣for (int[] ints : doubleArrayNew) {for (int anInt : ints) {//排版一下System.out.printf("\t"+anInt);}//換行System.out.println();}} }

執行結果

總結

以上是生活随笔為你收集整理的浅谈:稀疏数组与二维数组之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。