一、为什么要用使用稀疏数组
在一些二维数组中,因为很多值都是默认值0或者是同一个值时候,我们存储导致存储了很多无用的数据。例如五子棋盘:
黑子棋子用1表示,蓝色棋子用2表示,这样子我们可以得到得到一个11*11的二维数组。
但是数组中大部分的元素为0,这样我们的二维数组中就保存了很多无用的数据,这个时候为了能节省空间,可以使用稀疏数组。
二、二维数组转稀疏数组的思路
1、[0]下标一个元素代表的是二维数组有11行,第二个元素代表是二维数组有11列,第三次个元素代表的是值得个数(例:棋盘的棋子代表值,有多少个棋子则有多少个值)
2、除了[0]下标以外,其它的下标代表值(棋子)的位置。例:[1]代表在二维数组[1][2]位置,值为1;[2]代表在二维数组[2][3]位置,值为2;
综上所述:这样子我们就将一个11*11的二维数组变成了一个3*3的稀疏数组,大大节省了空间。
三、代码的实现
二维数组转稀疏数组:
public class Test04 {
public static void main(String[] args) {
//创建一个11*11的棋盘
int demo[][] = new int[11][11];
//在棋盘放入两个棋子。1-黑子、2-蓝子
demo[1][2] = 1;
demo[2][3] = 2;
//将二维数组转为稀疏数组
//第一步,遍历数组找到数值个数(棋子个数)
int count = 0; //count用来记录数值个数(棋子个数)
for (int i = 0; i < demo.length; i++) {
for (int j = 0; j < demo[0].length; j++) {
if (demo[i][j] != 0) {
count++;
}
}
}
//创建稀疏数组
int demo2[][] =new int[count+1][3];
//初始化[0]
demo2[0][0]=demo.length;
demo2[0][1]=demo[0].length;
demo2[0][2]=count;
//遍历二维数组,将值的位置放入稀疏数组
int count1 =1;//记录数据时放第几个,因为[0]已经放了行列个数,所以这个为1
for (int i = 0; i < demo.length; i++) {
for (int j = 0; j < demo[i].length; j++) {
if (demo[i][j] != 0) {
demo2[count1][0]=i;
demo2[count1][1]=j;
demo2[count1][2]=demo[i][j];
count1++;
}
}
}
for (int[] a:demo2) {
System.out.print(a[0]+"---");
System.out.print(a[1]+"---");
System.out.println(a[2]);
}
}
}
===================================打印输出:
11---11---2
1---2---1
2---3---2
稀疏数组转二维数组:
public class Test05 {
public static void main(String[] args) {
int a [][]=new int[3][3];
a[0][0]=11;
a[0][1]=11;
a[0][2]=2;
a[1][0]=1;
a[1][1]=2;
a[1][2]=1;
a[2][0]=2;
a[2][1]=3;
a[2][2]=2;
int[][] b=new int[a[0][0]][a[0][1]];
for (int i =1;i<a.length;i++){
b[a[i][0]][a[i][1]]=a[i][2];
}
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[i].length; j++) {
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
}
================================打印输出:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
版权声明:本文为qq_42560968原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。