稀疏数组的学习
package ArraysXishu;
public class xishuArrays {
public static void main(String[] args) {
int [][]a= new int[8][8];
a[1][2]=1;
a[2][3]=2;
a[2][4]=22;
a[4][4]=3;
a[5][6]=4;
a[6][7]=5;
System.out.println("输出原数组“");
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("--------------------------");
//转换为稀疏数组
// 获取有效值的个数 先定义一个 sum 用于保存有效值
int sum =0;
for (int i = 0; i <8 ; i++) {
for (int j = 0; j <8 ; j++) {
if(a[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数"+sum);
System.out.println("--------------------------");
System.out.println("打印稀疏数组");
//创建一个稀疏数组
int [][] a2=new int[sum+1][3];
a2[0][0]=a.length;
a2[0][1]=a.length;
a2[0][2]=sum;
//2.遍历二维数组 将非零的数存放在 稀疏数组里
int count=0;//记录稀疏数组存了 多少个数
for (int i = 0; i<a.length ; i++) {
for (int j = 0; j <a[i].length ; j++) {
if(a[i][j]!=0){//如果当前数组不为0 将值记录到稀疏数组里
count++;
a2[count][0]=i;
a2[count][1]=j;
a2[count][2]=a[i][j];
}
}
}
//输出稀疏数组
System.out.println("行"+"\t"+"列"+"\t"+"值"+"\t");
for (int i = 0; i <a2.length ; i++) {
System.out.println(a2[i][0]+"\t"
+a2[i][1]+"\t"
+a2[i][2]+"\t");
}
System.out.println("--------------------------");
System.out.println("还原稀疏数组");
//3.读取稀疏数组
// 定义a3的数组长度 a2[0][0]=a.length=8; a2[0][1]=a.length =8;
int[][] a3=new int[a2[0][0]][a2[0][1]];
//给其中的元素还原他的值
for (int i = 1; i<a2.length ; i++) {//i要从1 开始
a3[a2[i][0]][a2[i][1]]=a2[i][2];
}
System.out.println("输出还原数组");
for (int[] ints : a3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}
运行结果
输出原数组
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 2 22 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 3 0 0 0
0 0 0 0 0 0 4 0
0 0 0 0 0 0 0 5
0 0 0 0 0 0 0 0
--------------------------
有效值的个数6
--------------------------
打印稀疏数组
行 列 值
8 8 6
1 2 1
2 3 2
2 4 22
4 4 3
5 6 4
6 7 5
--------------------------
还原稀疏数组
输出还原数组
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 2 22 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 3 0 0 0
0 0 0 0 0 0 4 0
0 0 0 0 0 0 0 5
0 0 0 0 0 0 0 0
Process finished with exit code 0