稀疏数组(sparsearray)
有什么用
在二维数组中如果有很多值是默认值0,因此记录了很多没有意义的数据,需要使用稀疏数组来存储
处理方法
1.记录数组一共有几行几列,有多少个不同值
2.把具有不同值得元素的行列和值记录在小规模的数组中,缩小程序的规模
例如:
行(row)列(col)值(value)
[0]678[1]126[2]226
1.[0]表示:原始数组一共有多少行,多少列和一共有多少个值
2.[1]表示:第1行 ,第2列 ,值是6
2.[2]表示:第2行 ,第2列 ,值是6
二维数组转稀疏数组
遍历原始二维数组,得到有效数据的个数sum根据sum可以创建稀疏数组 sparsearry int [sum] [3]将二维数组的有效数据存入到稀疏数组
稀疏数组转原始的二维数组
先读取稀疏数组第一行,创建原始的二维数据数组再读取稀疏数组后几行,并赋值给原始数组
代码示例
public class Sparse2Array {
private int [][] array
= {{0,0,0,0,0,0},{0,2,3,0,0,6},{0,0,0,1,0,0},{0,0,0,0,0,9}};
private void getSparse(){
int row
= array
.length
;
int col
= array
[0].length
;
int valNum
= getValNum();
int[][] sparse
= new int[valNum
+1][3];
int r
= 0;
for (int i
= 0; i
<row
; i
++) {
for (int j
= 0; j
< col
; j
++) {
if(array
[i
][j
] != 0){
sparse
[r
+1][0] = i
;
sparse
[r
+1][1] = j
;
sparse
[r
+1][2] = array
[i
][j
];
r
++;
}
}
}
sparse
[0][0] = row
;
sparse
[0][1] = col
;
sparse
[0][2] = valNum
;
System
.out
.println("===========稀疏数组==========");
print(sparse
);
System
.out
.println("===========还原数组==========");
int [][] orgarr
= new int [sparse
[0][0]][sparse
[0][1]];
int orrow
= sparse
.length
;
for (int i
= 1; i
< orrow
; i
++) {
orgarr
[sparse
[i
][0]][sparse
[i
][1]] = sparse
[i
][2];
}
print(orgarr
);
}
private int getValNum(){
int valNum
= 0;
int row
= array
.length
;
int col
= array
[0].length
;
for (int i
= 0; i
<row
; i
++) {
for (int j
= 0; j
< col
; j
++) {
if(array
[i
][j
] != 0){
valNum
++;
}
}
}
return valNum
;
}
private void print(int [][] arr
){
int row
= arr
.length
;
int col
= arr
[0].length
;
for (int i
= 0; i
< row
; i
++) {
for (int j
= 0; j
< col
; j
++) {
System
.out
.print(arr
[i
][j
]);
}
System
.out
.println();
}
}
public static void main(String
[] args
) {
new Sparse2Array().getSparse();
}
}