当一个数组中的很多值默认是0,因此记录了很多没有意义的数据,因而需要稀疏数组
当一个数组中大部分是由零,或者为同一个值的数组时,可以使用稀疏数组.
稀疏数组处理方法:
遍历原始数组的二维数组,得到有效数据的个数sum
根据sum就可以创建sparseArrayint[sum+1][3]
[sum+1]:表示行数,第一行用来存放原始数组的行列数,和一共有多少个值
将二维数组的有效数据存入到稀疏数组
稀疏数组转化为原始数组的思路
package day1.work;
public class SparseArray {
public static void main(String[] args) {
int allNum = 10;//总行数和总列数
int[][] array = new int[allNum][allNum];
//创建一个原始数组
array[1][1] = 2;
array[2][3] = 3;
array[5][5] = 1;
System.out.println("原始的二维数组:");
for (int[] a : array) {
for (int data : a) {
System.out.print(data + "\t");
}
System.out.println();
}
//二维数组转换到稀疏数组
//遍历非零的个数
int sum = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] != 0) {
sum++;
}
}
}
//创建稀疏数组
int[][] sparseArray = new int[sum + 1][3];
sparseArray[0][0] = allNum;//行
sparseArray[0][1] = allNum;//列
sparseArray[0][2] = sum;//数的数量
//遍历二维数组给稀疏数组赋值
int countNum = 0;//记录一共及格数字
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] != 0) {
countNum++;
sparseArray[countNum][0] = i;
sparseArray[countNum][1] = j;
sparseArray[countNum][2] = array[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组为");
System.out.println("行\t列\t值");
for (int[] a : sparseArray) {
for (int data : a) {
System.out.print(data + "\t");
}
System.out.println();
}
//将稀疏数组转换称为正常数组
int[][] array2 = new int[sparseArray[0][0]][sparseArray[0][0]];
for (int i = 1; i < sparseArray.length; i++) {
/*
行 列 值
10 10 3
1 1 2
2 3 3
5 5 1
*/
// 行 列 值
array2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
System.out.println("转换后的正常组");
for (int[] a : array2) {
for (int data : a) {
System.out.print(data + "\t");
}
System.out.println();
}
}
}