Day18稀疏数组
二维数组中的大部分默认值都为零,导致记录了许多没有意义的数据,稀疏数组用坐标对应有效值的方式大大简化了原本繁杂的数组

package com.cc.array;
import java.util.Arrays;
public class ArrayDemo8 {
public static void main(String[] args) {
//创建一个二维数组:11*11 规定:0代表无棋子 1:黑棋 2:白棋
int [][] array1 = new int [11][11];
array1[5][4] = 9;
array1[6][8] = 7;
array1[7][9] = 8;
//输出原始数组
System.out.println("输出原始数组");
System.out.println(Arrays.deepToString(array1));
//Array.deepToString(array1)会将整个数组以紧凑的格式输出,因此所有数组元素会在同一行显示
//若是要每行输出一个一维数组,使其展示为表格的形式,可以想通过循环遍历每一个一维数组,然后借助Arrays.toString()方法输出
for(int i = 0;i<array1.length;i++){
System.out.println(Arrays.toString(array1[i]));
}
for(int [] row : array1){
for(int row2 : row){
System.out.print(row2+"\t");
}
System.out.println();
}
//转换为稀疏数组保存
//获取有效值的个数
int sum = 0;
for(int i = 0;i<11;i++){
for(int j = 0;j<11;j++){
if(array1[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数"+sum);
//创建一个稀疏数组的数组
int [][] array2 = new int [sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
//遍历二维数组,将非零的数存入稀疏数组中
int count = 0;
for(int i = 0;i<array1.length;i++){
for(int j = 0;j<array1[i].length;j++) {
if (array1[i][j] != 0) {
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组");
for(int i = 0;i<array2.length;i++){
System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
}
System.out.println("====================================");
System.out.println("还原");
//读取该数组
int [][]array3 = new int[array2[0][0]][array2[0][1]];
//给其中的元素还原它得的值
for(int i = 1;i<array2.length;i++){
array3[array2[i][0]][array2[i][1]] = array2[i][2];//坐标对应的有效值
}
///打印
System.out.println("输出还原的数组");
for(int [] array4 : array3){
for(int aray5: array4){
System.out.print(aray5+"\t");
}
System.out.println(" ");
}
}
}

浙公网安备 33010602011771号