稀疏数组(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

浙公网安备 33010602011771号