稀疏数组
当一个数组中大部分元素都为同一个值,可以使用稀疏数组来保存该数组。(以时间换空间的做法)
稀疏数组
记录该数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列以及值记录在一个小规模的数组中,从而缩小数组所占的内存空间
使用稀疏数组之后从一个6*7=42的数组变为9*3=27的数组
建立稀疏数组的步骤
遍历原始数组,得到有效数据的个数sum根据sum创建稀疏数组sparseArr int[sum+1][3]将二维数组的有效数据存储入稀疏数组
稀疏数组转换成原始二维数组的步骤
先读取稀疏数组的第一行,根据第一行存储的原始数组的行数和列数、有效数据个数,创建原始的数组。再读取稀疏数组后几行的有效数据并赋给原始数组
代码
public class SparseArray {
public static void main(String
[] args
) {
int chessArr
[][] = new int[11][11];
chessArr
[1][2] = 1;
chessArr
[2][4] = 1;
int sum
= 0;
for(int[] row
: chessArr
){
for(int column
: row
){
System
.out
.printf("%d\t",column
);
if(column
!= 0){
sum
++;
}
}
System
.out
.println();
}
int[][] sparseArray
= new int[sum
+1][3];
sparseArray
[0][0] = 11;
sparseArray
[0][1] = 11;
sparseArray
[0][2] = sum
;
sum
= 0;
for(int i
= 0; i
< chessArr
.length
; i
++){
for(int j
= 0; j
< chessArr
[0].length
; j
++){
if(chessArr
[i
][j
] != 0){
sparseArray
[++sum
][0] = i
;
sparseArray
[sum
][1] = j
;
sparseArray
[sum
][2] = chessArr
[i
][j
];
}
}
}
System
.out
.println("稀疏数组为:");
for(int[] row
: sparseArray
){
for(int column
: row
){
System
.out
.printf("%d\t",column
);
}
System
.out
.println();
}
int[][] chessArr2
= new int[sparseArray
[0][0]][sparseArray
[0][1]];
for(int i
= 1; i
<= sparseArray
[0][2]; i
++){
chessArr2
[sparseArray
[i
][0]][sparseArray
[i
][1]] = sparseArray
[0][2];
}
for(int[] row
: chessArr2
){
for(int column
: row
){
System
.out
.printf("%d\t",column
);
if(column
!= 0){
sum
++;
}
}
System
.out
.println();
}
}
}