1、它可以压缩数据,减少内存空间的使用。
过程
2、记录数组元素的坐标和值。
3、稀疏数组有3列,分别是行、列、值,行数是原数组不同值的数加1;
array[0]记录一组行数和列数,以及不同值的数;
然后每行记录一个值在原数组的行列下标记和自己的值。
实例
public static void main(string[] args) { //创建一个原始的二维数组 //0:没有棋子,1:黑子,2:白子 int chessarr1[][] = new int[11][11]; //下面先固定二维数组的元素,后面可优化~ chessarr1[1][2] = 1; chessarr1[2][3] = 2; chessarr1[4][5] = 2; //输出原始的二维数组: system.out.println(原始的二维数组:); printarray(chessarr1); //下面将二维数组转化为稀疏数组 //1.先遍历二维数组,得到非0数据的个数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessarr1[i][j] != 0) { sum++; } } } //2.创建对应的稀疏数组 int sparesarr[][] = new int[sum + 1][3]; //给稀疏数组赋值 sparesarr[0][0] = 11; sparesarr[0][1] = 11; sparesarr[0][2] = sum; //遍历二维数组,将非0的值存放在sparesarr中 int count = 0;//count 用于记录是第几个非0数据 for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessarr1[i][j] != 0) { count++; sparesarr[count][0] = i; sparesarr[count][1] = j; sparesarr[count][2] = chessarr1[i][j]; } } } //输出稀疏数组的形式 system.out.println(); system.out.println(得到的稀疏数组为:); printarray(sparesarr); system.out.println(); //下面将稀疏数组恢复成二维数组 //先读取稀疏数组的第一行元素,根据其数据,创建原始的二维数组 int chessarr2[][] = new int[sparesarr[0][0]][sparesarr[0][1]]; //读取稀疏数组后几行的元素(从第二行开始),并赋值给原始的二维数组即可 for (int i = 1; i < sparesarr.length; i++) { chessarr2[sparesarr[i][0]][sparesarr[i][1]] = sparesarr[i][2]; } //输出恢复后的二维数组 system.out.println(); system.out.println(恢复后的二维数组); printarray(chessarr2);} //打印数组public static void printarray(int[][] array) { for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[0].length; j++) { system.out.printf(%d\t, array[i][j]); } system.out.println(); }}
以上就是java稀疏数组怎么定义和使用的详细内容。
