Java 轻松实现二维数组与稀疏数组互转
作者:汪汪程序员
在某些应用场景中需要大量的二维数组来进行数据存储,但是二维数组中却有着大量的无用的位置占据着内存空间,稀疏数组就是为了优化二维数组,节省内存空间
二维数组
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。
稀疏数组
1、稀疏算法的基本介绍
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。从而减少计算机不必要的内存开销。
2、稀疏算法的处理方式
(1)数组中第一行记录原始数组中一共有几行几列,有多少个不同的值。
(2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。
二维数组转稀疏数组的思路
- 遍历原始的二维数组,得到有效数据的个数sum,根据sum就可以创建稀疏数组sparseArr int[sum+1][3]
- 将二维数组的有效数据存入到稀疏数组
稀疏数组转原始的二维数组的思路:
- 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的chessArr2=int[11][11]
- 再读取稀疏数组后几行的数据,并赋给原始的二维数组即可
写一个二维数组:
//1.创建一个二维数组 int chessArr1[][]=new int[11][11]; //2.给二维数组赋值 chessArr1[1][2]=1; chessArr1[2][3]=2; //3.双重for循环输出二维数组 System.out.println("原始的二维数组:"); for (int[] row : chessArr1) { for (int data : row) { System.out.printf("%d\t",data); } //每输出完一个一重数组换一行 System.out.println(); }
将二维数组换换位稀疏数组
//将二维数组转稀疏数组 //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++; } } } System.out.println("有效值的个数为:"+sum); //2.创立对应的稀疏数组 int sparseArr[][]=new int[sum+1][3]; //3.给稀疏数组赋值 sparseArr[0][0]=11; sparseArr[0][1]=11; sparseArr[0][2]=sum; //4.遍历二维数组,给稀疏数组 int count=0;//用于记录是第几行 for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessArr1[i][j]!=0){ sparseArr[count+1][0]=i; sparseArr[count+1][1]=j; sparseArr[count+1][2]=chessArr1[i][j]; count++; } } } //5.输出稀疏数组 //以下是两种遍历方式: /*for (int[] ints : sparseArr) { for (int anInt : ints) { System.out.printf("%d\t",anInt); } //把一个数组遍历完之后换一行 System.out.println(); }*/ System.out.println("得到稀疏数组为~~~~~"); for (int i = 0; i < sparseArr.length; i++) { System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]); }
将稀疏数组还原为二维数组
//把稀疏数组还原为二维数组 //1.创建二维数组 int chessArr2[][]=new int[sparseArr[0][0]][sparseArr[0][1]]; //2.给二维数组赋值 for (int i = 1; i < sparseArr.length; i++) { chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; } //3.输出二维数组 for (int[] row : chessArr2) { for (int data : row) { System.out.printf("%d\t",data); } System.out.println(); }
树越是向往高处的光亮,它的根就越要向下,向泥土向黑暗的深处。
到此这篇关于Java 轻松实现二维数组与稀疏数组互转的文章就介绍到这了,更多相关Java 数组转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!