数据结构之二维数组与稀疏数组的转换
1.二维数组
二维数据其实就是高数中的矩阵,在此不做过多的解释
2.稀疏数组
当一个二维数组中大多值为0,或者相同时,我们可以考虑用到稀疏数组,来减少内存
稀疏数组的处理方法:
1)一个有3列的二维数组,记录原数组有几行几列,多少个不同的值
2)不同值的元素的所在行以及列记录在稀疏数组中,从而缩小规模
3.例子如下:
4.下面是稀疏数组以及二维数组之间的转换
package com.ebiz.array; /** * @author YHj * @create 2019-07-13 16:46 * <p> * 稀疏数组 */ public class SparseArray { public static void main(String[] args) { //创建原始二维数组 11*11 1代表黑子 2代表白子 int[][] chessArray1 = new int[11][11]; //第一行第二列有一个黑子 chessArray1[1][2] = 1; //第二行第三列有一个白子 chessArray1[2][3] = 2; /* System.out.println("原始二维数组"); for (int[] row : chessArray1) { for (int i : row) { System.out.printf("%d\t",i); //System.out.print(i+"\t"); } System.out.println(); }*/ //将二维数组转成稀疏数组 //1.得到原始数组中非0数值的个数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessArray1[i][j] != 0) { sum++; System.out.println(); } } } // System.out.println("sum=" + sum); //2.创建稀疏数组 int[][] sparseArray = new int[sum+1][3]; //3.稀疏数组赋值 //3.1 第0行 sparseArray[0][0]=11; sparseArray[0][1]=11; sparseArray[0][2]=sum; //3.2 遍历原始数组,将非空值付给稀疏数组 int count=0; //定义一个计数器,改变行数 for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessArray1[i][j] != 0) { count++; sparseArray[count][0]=i; sparseArray[count][1]=j; sparseArray[count][2]=chessArray1[i][j]; } } } //输出稀疏数组 System.out.println("字数数组为:"); for (int[] row : sparseArray) { for (int i : row) { System.out.printf("%d\t",i); } System.out.println(); } System.out.println("------------------------------------------------------------"); System.out.println("稀疏数组复原"); //根据稀疏数组创建对应数组 int [][] chary=new int[sparseArray[0][0]][sparseArray[0][1]]; //遍历稀疏数组,付给chary for (int i = 1; i < sparseArray.length; i++) { chary[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2]; } //输出array for (int[] row : chary) { for (int i : row) { System.out.printf("%d\t",i); //System.out.print(i+"\t"); } System.out.println(); } } }