1.简介
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
· 记录数组一共有几行几列,有多少个不同的值。
· 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。
2.代码案例
我们就按照上面棋盘的那个例子来编写代码。
package com.szh.array; /** * */ public class SparseArray { public static void main(String[] args) { //定义二维数组 int[][] array = new int[11][11]; array[1][2] = 1; array[2][3] = 2; //打印输出该二维数组 System.out.println("此二维数组如下:"); for (int[] row : array) { for (int val : row) { System.out.printf("%d\t", val); } System.out.println(); } System.out.println(); //计算上述二维数组中有效数据的个数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array[i][j] != 0) { sum++; } } } /** * 将上述二维数组转为稀疏数组 * 稀疏数组第一行存储原二维数组的行、列、有效数据个数 * 后面的每一行依次存储每个有效数据在原二维数组中的行、列、对应的值 * 所以该稀疏数组共有 有效数据个数+1 行,3列 */ int[][] sparseArray = new int[sum + 1][3]; sparseArray[0][0] = 11; sparseArray[0][1] = 11; sparseArray[0][2] = sum; //接下来将有效数据存入稀疏数组中 int count = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array[i][j] != 0) { count++; sparseArray[count][0] = i; sparseArray[count][1] = j; sparseArray[count][2] = array[i][j]; } } } //打印输出稀疏数组 System.out.println("转换为稀疏数组如下:"); for (int i = 0; i < sparseArray.length; i++) { System.out.printf("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]); } System.out.println(); //再将稀疏数组还原成原始的二维数组 int[][] oldArray = new int[sparseArray[0][0]][sparseArray[0][1]]; for (int i = 1; i <= count; i++) { oldArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; } //打印输出还原之后的二维数组 System.out.println("还原之后的二维数组如下:"); for (int[] row : oldArray) { for (int val : row) { System.out.printf("%d\t", val); } System.out.println(); } } }