Java數組 9.稀疏數組 什麼是稀疏數組? 當一個數組中大部分元素為0,或者為同一值的數組時,可以使用稀疏數組來保存該數組。 稀疏數組的處理方式是: 記錄數組一共有幾行幾列,有多少個不同的值 把具有不同值 的元素和行列及值記錄在一個小規模的數組中,從而縮小程式的規模 如下圖:左邊是原始數組,右邊是 ...
9.稀疏數組
什麼是稀疏數組?
-
當一個數組中大部分元素為0,或者為同一值的數組時,可以使用稀疏數組來保存該數組。
-
稀疏數組的處理方式是:
-
記錄數組一共有幾行幾列,有多少個不同的值
-
把具有不同值 的元素和行列及值記錄在一個小規模的數組中,從而縮小程式的規模
-
如下圖:左邊是原始數組,右邊是稀疏數組
根據上圖創建稀疏數組:
package li.bolog.array;
//創建稀疏數組
public class ArrayDemo08 {
public static void main(String[] args) {
//1.創建一個二維數組 11*11 0:代表沒有棋子 1:黑棋 2:白棋
int[][] array1=new int[11][11];
array1[1][2]=1;
array1[2][3]=2;
//輸出原始的數組
System.out.println("輸出原始的數組:");
for (int[] ints:array1) {
for (int anInt:ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("=============================");
//轉換為稀疏數組保存
//獲取有效值的個數sum
int sum=0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array1[i][j] != 0) {
sum++;
}
}
}
System.out.println("有效值的個數:"+sum);
//2.創建一個稀疏數組
/*樣式如圖所示
一共有sum個有效值,則行數是sum+1,記錄總行、列、有效值個數占一行,記錄有效值占sum行
3列則是固定的,分別是行、列、值
*/
int[][] array2=new int[sum+1][3];
array2[0][0]=11;
array2[0][1]=11;
array2[0][2]=sum;
//遍歷二維數組,將非零的值存放到稀疏數組中
int count=0;
for (int i = 0; i < array1.length; i++) {//array1.length代表array1的行數
for (int j = 0; j < array1[i].length; j++) {//array1[i].length代表列數
if (array1[i][j] != 0) {
count++;//count數值從一開始,因為第0行已經存了稀疏數組的總行、列、有效值個數
array2[count][0]=i;//從當前行的第一個值存有效值的行數
array2[count][1]=j;//從當前行的第二個值存有效值的列數
array2[count][2]=array1[i][j];//從當前行的第三個值存放有效值數值
}
}
}
//輸出稀疏數組
System.out.println("稀疏數組:");
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0]+"\t"
+array2[i][1] +"\t"
+array2[i][2] +"\t");
}
System.out.println("=============================");
//稀疏數組還原
//1.讀取稀疏數組
//array2[0][0]代表原來數組總行數 array2[0][1]代表原來數組總列數
int[][] array3 = new int[array2[0][0]][array2[0][1]];
/*
稀疏數組:
11 11 2
1 2 1
2 3 2
*/
//2.給其中元素還原值
for (int i = 1; i < array2.length; i++) {//array.length為稀疏矩陣的行數,這裡具體值為3
array3[ array2[i][0] ][ array2[i][1] ] = array2[i][2];//這裡只填入了有效值,其他的0值在array3創建時已經隱式初始化
}
//3.列印array3
System.out.println("輸出還原的數組:");
for (int[] ints:array3) {
for (int anInt:ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}