稀疏数组
-
当一个数组中大部分元素为0,或者多为同以值的数组时,可以使用稀疏数组来保存该数组。
-
稀疏数组的处理方式是
-
记录数组一共几行几列,有多少个不同值
-
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
-
-
以下为 转换稀疏数组 和 还原稀疏数组的代码
public class Demo_07 { public static void main(String[] args) { //创建二维数组 0代表没有棋子 1代表黑棋 2代表白棋 int[][] arrays_01 = new int[11][11]; //新建一个棋盘 arrays_01 [1][2] = 1; //随机定义黑棋 arrays_01 [2][3] = 2; //随机定义白棋 System.out.println("输出原始数据"); //输出原始棋盘 for (int[] ints : arrays_01) { //遍历循环 arrays_01 for (int anInt : ints) { System.out.print(anInt + "\t"); //输出 arrays_01的所有数值 } System.out.println(); //换行 } System.out.println("=========================="); //转换为稀疏数组保存 //先获取有效值的个数 int sum = 0; //定义并归零有效值 for (int i = 0; i < arrays_01.length; i++) { //循环行 for (int j = 0; j < arrays_01[i].length; j++) { //循环列 if (arrays_01[i][j] != 0) { //判断当前是否不等于0 sum++; //如果不等于0 sum +1 } } } System.out.println(sum); //打印出有效值总数 //创建一个稀疏数组的数组 int[][] arrays_02 = new int[sum + 1][3]; //声明并赋值一个稀疏数组待用 arrays_02 [0][0] = arrays_01.length; //将 arrays_01的行数 赋值到 arrays_02 的 0,0 arrays_02 [0][1] = arrays_01[0].length; //将 arrays_01 的列数 赋值到 arrays_02 的 0,1 arrays_02 [0][2] = sum; //将有效数数量赋值到 arrays_02 的 0,2 //遍历二维数组,将非零的值存放稀疏数组中 int count = 0; //声明并归零 count for (int i = 0; i < arrays_01.length; i++) { //循环 arrays_01的行 for (int j = 0; j < arrays_01[1].length; j++) { //循环 arrays_01 的列 if (arrays_01[i][j] != 0) { //判断当前元素的值是否不等于 = count++; //当前已记录有效值的数量+1 arrays_02[count][0] = i; //arrays_02 的 count,0 等于当前 arrays_01 的有效元素的行 arrays_02[count][1] = j; //arrays_02 的 count,1 等于当前 arrays_01 的有效元素的列 arrays_02[count][2] =arrays_01[i][j]; //arrays_02 的 count,2 等于当前 arrays_01 的有效元素的值 } } } //输出稀疏数组 for (int[] ints : arrays_02) { //遍历 arrays_02 for (int anInt : ints) { System.out.print(anInt + "\t"); //输出arrays_02 的元素 } System.out.println(); //换行 } System.out.println("============================="); //还原稀疏数组 int[][] arrays_03 = new int[arrays_02[0][0]][arrays_02[0][1]]; //声明一个数组并将行列赋值为 arrays_02 的0,0 和 0,1 for (int i = 1; i < arrays_02.length; i++) { //循环小于 arrays_02 的成员数 arrays_03[arrays_02[i][0]][arrays_02[i][1]] = arrays_02[i][2]; //还原稀疏数组 } for (int[] ints : arrays_03) { //遍历 arrays_03 for (int anInt : ints) { System.out.print(anInt + "\t"); //输出 arrays_03 } System.out.println(); //换行 } } }