27.稀疏数组
-
在多维数组中可能会存在大量空间存储无效数值的现象
-
为了节省空间,我们可以通过记录 行 ,列,值的方式,来压缩数组空间
-
这样形成的新数组我们称之为稀疏数组
- 如图15×15的棋盘,[1][2] -----> 1, [2][3]----> 2 ,其余位置都为0,用代码来压缩数组成稀疏数组
package com.demo.array;
public class Demo5 {
public static void main(String[] args) {
int[][] arrays = new int[15][15];
arrays[1][2] = 1;
arrays[2][3] = 2;
printArrays(arrays);
int[][] sparseArrays = createSparseArrays(arrays);
System.out.println("================================");
System.out.println("压缩后的稀疏数组:");
printArrays(sparseArrays);
int[][] newArrays = getInitialArrays(sparseArrays);
System.out.println("================================");
System.out.println("还原后的数组:");
printArrays(newArrays);
}
// 还原数组
public static int[][] getInitialArrays(int[][] sparseArrays) {
int[][] newArrays = new int[sparseArrays[0][0]][sparseArrays[0][1]];
// 根据稀疏数组的第一行存储的原数组的行数和列数
for (int row = 1; row < sparseArrays.length; row++) {
newArrays[sparseArrays[row][0]][sparseArrays[row][1]] = sparseArrays[row][2];
}
return newArrays;
}
// 创建稀疏数组
public static int[][] createSparseArrays(int[][] arrays) {
int count = 0;
for (int[] array : arrays
) {
for (int value : array
) {
if (value != 0) count++; // 获取有效数据个数
}
}
int[][] sparseArrays = new int[count + 1][3]; // 创建稀疏数组
count = 1;
sparseArrays[0][0] = arrays.length; // 记录原数组行数
sparseArrays[0][1] = arrays[0].length; // 记录原数组列数
for (int row = 0; row < arrays.length; row++) {
for (int cls = 0; cls < arrays[row].length; cls++) {
if (arrays[row][cls] != 0) {
sparseArrays[count][0] = row; // 记录有效数据的行
sparseArrays[count][1] = cls; // 记录有效数据的列
sparseArrays[count][2] = arrays[row][cls];
count++;
}
}
}
return sparseArrays;
}
// 打印数组
public static void printArrays(int[][] arrays) {
for (int row = 0; row < arrays.length; row++) {
for (int cls = 0; cls < arrays[row].length; cls++) {
System.out.print(arrays[row][cls] + "\t");
}
System.out.println(); // 换行
}
}
}
运行结果: