认识:当一个数组中大部分元素为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