简单来说就是因为二维数组很多值默认为0,因此记录了很多没有意义的数据,所以我们可以通过创建稀疏数组来解决这个问题!
稀疏数组(Sparse Array). 当一个数组中大部分元素是0,或者是一个相同的值时,可以使用稀疏数组来保存该数组。. 稀疏数组的处理方式是:. 记录数组一共有几行几列,以及不同值的数量. 把具有不同值元素的行列及其值记录在一个小规模的数组中,从而缩小数据的规模。
public class Hello {
public static void main(String[] args) {
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
int sum = 0;// 获取有效值的个数
// 输出原始数组
System.out.println("输出的原始二维数组:");
for (int[] i : array) {// 输出所有行
for (int j : i) {// 输出每一行中的所有列
System.out.print(j + "\t");
if (j != 0) {
sum++;
}
}
System.out.print("\n");
}
System.out.println("有效值的个数:" + sum);
System.out.println(
"==========================================================================================================");
// 转换为稀疏数组保存
int[][] array1 = new int[sum + 1][3];// 创建一个稀疏数组 sum+1是因为首行是行数,列数,有效值个数
int count = 0;
array1[0][0] = array.length;// 设置稀疏数组的行数
array1[0][1] = array[0].length;// 设置稀疏数组的列数
array1[0][2] = sum;// 设置稀疏数组的有效值个数
// System.out.print(array1[0][0] + "\t");
// System.out.print(array1[0][1] + "\t");
// System.out.println(array1[0][2] + "\t");
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] != 0) {
count++;
array1[count][0] = i;
array1[count][1] = j;
array1[count][2] = array[i][j];
}
}
}
// 输出稀疏数组
System.out.println("输出的稀疏数组:");
System.out.println("行数\t列数\t有效值");
for (int i = 0; i <= count; i++) {
System.out.print(array1[i][0] + "\t");
System.out.print(array1[i][1] + "\t");
System.out.println(array1[i][2] + "\t");
}
System.out.println(
"==========================================================================================================");
// 还原稀疏数组
System.out.println("还原的二维数组:");
int[][] array2 = new int[array1[0][0]][array1[0][1]];// 分别是行数和列数!
for (int i = 1; i < array1.length; i++) {// 循环二维数组的行数
array2[array1[i][0]][array1[i][1]] = array1[i][2];// 将稀疏数组的有效值赋值给还原数组
}
for (int[] c : array2) {// 输出所有行
for (int x : c) {// 输出每一行中的所有列
System.out.print(x + "\t");
}
System.out.print("\n");
}
}
}
输出效果
本人通过狂神说的视频学习java,作为java初学者,欢迎指点和交流!