稀疏数组
一、稀疏数组的定义
当一个数组(包括多维数组)中的大部分元素为0或者为同一个数值的数组时,为了节约空间起到压缩的效果,将数据用另一种结构来表示,即稀疏数组。
结构如图:
定义一个数组array[11][11];
如下可看到数组元素大多都是0,我们可以采用稀疏数组进行优化
上图可以转化成如图
第一行记录总行总列及不是默认值得数的个数
下面几行记录其所在位置及值
将数组转化为稀疏数组代码:
public class Test01 {
public static void main(String[] args) {
int [][] array01 = new int[11][11];
array01 [1][7]=1;
array01 [4][7]=2;
array01 [6][9]=7;
array01 [1][8]=1;
for (int[] a:array01){
for (int b:a){
System.out.print(b+"\t");
}
System.out.println();
}
System.out.println("==========================");
//将其转化为稀疏数组
//1.获取有效值个数
int sum=0;
for (int i = 0; i <array01.length ; i++) {
for (int j = 0; j <array01[i].length ; j++) {
if (array01[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值个数:"+sum);
//创建稀疏数组
int[][] array02 = new int[sum+1][3];
array02[0][0]=11;
array02[0][1]=11;
array02[0][2]=sum;
//遍历二维数组,将值存入稀疏数组
int count=0;
for (int i = 0; i <array01.length ; i++) {
for (int j = 0; j <array01[i].length ; j++) {
if (array01[i][j]!=0){
count++;
array02[count][0]=i;
array02[count][1]=j;
array02[count][2]=array01[i][j];
}
}
}
//输出稀疏数组
for (int i = 0; i <count ; i++) {
System.out.println(array02[i][0]+"\t"+array02[i][1]+"\t"+array02[i][2]+"\t");
}
}
}
执行结果
将稀疏数组转化为正常数组
//还原
//定义数组
int[][] arrat03=new int[array02[0][0]] [ array02[0][1]];
//赋值
for (int i = 1; i <array02.length ; i++) {
arrat03[array02[i][0]][array02[i][1]] = array02[i][2];
}
//输出数组
for (int[] a:arrat03){
for (int b:a){
System.out.print(b+"\t");
}
System.out.println();
}
输出结果