稀疏数组(Sparse Array)

认识:当一个数组中大部分元素为0或同一数据时,可以用稀疏数组来储存其有效信息。

目的:减少存储空间浪费,压缩数据规模,只保存有用信息

存储方式:

存储在二维数组中,在稀疏数组中

6 用稀疏数组表示:arr[0] [0];

7 用稀疏数组表示:arr[0] [1];

8用稀疏数组表示:arr[0] [2];

 

5 用稀疏数组表示:arr[8] [0];

2 用稀疏数组表示:arr[8] [1];

28 用稀疏数组表示:arr[8] [2];

 

多维数组表示示意图:

 

二维数组表示示意图

 

二维矩阵转换为稀疏数组示意图:

稀疏数组

package array;

public class ArrayDemo06 {
public static void main(String[] args) {
int[][] arr1 = new int[5][5];
arr1[1][2] = 1;
arr1[2][3] = 2;
System.out.println("原始二维数组:");
for (int[] ints : arr1) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
/*
变为稀疏数组
*/

//获取有用数据的个数
int sum = 0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if(arr1[i][j] != 0){
sum++;
}
}
}
//获取数组总共有几行、几列(arr1.length,arr1[0].length)
//构建稀疏数组

int[][] arr2 = new int[sum+1][3];
arr2[0][0] = arr1.length;
arr2[0][1] = arr1[0].length;
arr2[0][2] = sum;

//获取有用数据的行、列、值,赋值稀疏矩阵
int num=0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1.length; j++) {
if(arr1[i][j] != 0){
num++;
arr2[num][0] = i;
arr2[num][1] = j;
arr2[num][2] =arr1[i][j];
}
}
}

//稀疏数组的输出
System.out.println("稀疏数组的输出:");
for (int[] ints : arr2) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}

/*
稀疏数组还原为二维数组
*/
//二维数组赋值
int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];
for (int i = 1; i < arr2.length; i++) {
arr3[arr2[i][0]][arr2[i][1]] = arr2[i][2];
}

//二维数组输出
System.out.println("还原数组输出:");
for (int[] ints : arr3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}

 

原始二维数组:
0	0	0	0	0	
0	0	1	0	0	
0	0	0	2	0	
0	0	0	0	0	
0	0	0	0	0	
稀疏数组的输出:
5	5	2	
1	2	1	
2	3	2	
还原数组输出:
0	0	0	0	0	
0	0	1	0	0	
0	0	0	2	0	
0	0	0	0	0	
0	0	0	0	0	

 

posted @ 2020-04-21 17:58  DannyBoy~  阅读(689)  评论(0)    收藏  举报