首頁 > 軟體

Java 輕鬆實現二維陣列與稀疏陣列互轉

2022-04-08 19:01:14

二維陣列

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

稀疏陣列

1、稀疏演演算法的基本介紹

當一個陣列中大部分元素為0,或者為同一個值的陣列時,可以使用稀疏陣列來儲存該陣列。從而減少計算機不必要的記憶體開銷。

2、稀疏演演算法的處理方式

(1)陣列中第一行記錄原始陣列中一共有幾行幾列,有多少個不同的值。
(2)把具有不同值的元素的行列及值記錄在一個小規模的陣列中,從而縮小程式的規模。

二維陣列轉稀疏陣列的思路

  • 遍歷原始的二維陣列,得到有效資料的個數sum,根據sum就可以建立稀疏陣列sparseArr int[sum+1][3]
  • 將二維陣列的有效資料存入到稀疏陣列

稀疏陣列轉原始的二維陣列的思路:

  • 先讀取稀疏陣列的第一行,根據第一行的資料,建立原始的二維陣列,比如上面的chessArr2=int[11][11]
  • 再讀取稀疏陣列後幾行的資料,並賦給原始的二維陣列即可

寫一個二維陣列:

//1.建立一個二維陣列
int chessArr1[][]=new int[11][11];
//2.給二維陣列賦值
chessArr1[1][2]=1;
chessArr1[2][3]=2;
//3.雙重for迴圈輸出二維陣列
System.out.println("原始的二維陣列:");
for (int[] row : chessArr1) {
    for (int data : row) {
        System.out.printf("%dt",data);
    }
    //每輸出完一個一重陣列換一行
    System.out.println();
}

將二維陣列換換位稀疏陣列

//將二維陣列轉稀疏陣列
//1.先遍歷二維陣列,得到非0資料的個數,知道資料個數,就可以建立稀疏陣列(知道了稀疏陣列的行)
int sum=0;
for (int i = 0; i < 11; i++) {
    for (int j = 0; j < 11; j++) {
        if (chessArr1[i][j]!=0){
            sum++;
        }
    }
}
System.out.println("有效值的個數為:"+sum);
//2.創立對應的稀疏陣列
int sparseArr[][]=new int[sum+1][3];
//3.給稀疏陣列賦值
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
//4.遍歷二維陣列,給稀疏陣列
int count=0;//用於記錄是第幾行
for (int i = 0; i < 11; i++) {
    for (int j = 0; j < 11; j++) {
        if (chessArr1[i][j]!=0){
            sparseArr[count+1][0]=i;
            sparseArr[count+1][1]=j;
            sparseArr[count+1][2]=chessArr1[i][j];
            count++;
        }
    }
}
//5.輸出稀疏陣列
//以下是兩種遍歷方式:
/*for (int[] ints : sparseArr) {
    for (int anInt : ints) {
        System.out.printf("%dt",anInt);
    }
    //把一個陣列遍歷完之後換一行
    System.out.println();
}*/
System.out.println("得到稀疏陣列為~~~~~");
for (int i = 0; i < sparseArr.length; i++) {
    System.out.printf("%dt%dt%dtn",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}

將稀疏陣列還原為二維陣列

//把稀疏陣列還原為二維陣列
//1.建立二維陣列
int chessArr2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
//2.給二維陣列賦值
for (int i = 1; i < sparseArr.length; i++) {
    chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
//3.輸出二維陣列
for (int[] row : chessArr2) {
    for (int data : row) {
        System.out.printf("%dt",data);
    }
    System.out.println();
}

樹越是嚮往高處的光亮,它的根就越要向下,向泥土向黑暗的深處。

到此這篇關於Java 輕鬆實現二維陣列與稀疏陣列互轉的文章就介紹到這了,更多相關Java 陣列轉換內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com