java稀疏数组
引入
需求:五子棋的棋盘存储
因为要存储许多默认值是0,是非常浪费空间资源的,所以把这些压缩起来----->稀疏数组
介绍
-
当一个数组中大部分元素为0,或者相同值时,可以使用稀疏数组来保存他们。
-
记录数组一共有几行几列,有多少个不同值
-
把具有不同值的元素和行列的值记录在一个小规模的数组中,从而缩小程序规模。
//定义一个普通数组有10行10列存储在指定位置存储1,2
int[][] arr=new int[10][10];
arr[1][3]=1;
arr[2][5]=2;
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
//创建一个稀疏数组,记录一下有多少个有效值使用sum
int sum=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if(arr[i][j]!=0){
sum++;
}
}
}
System.out.println("一共有"+sum+"个有效值");
int[][] arr1=new int[sum+1][3];//sum+1就是它的行数,3为列数
arr1[0][0]=arr.length;//稀疏数组用来存储行数
arr1[0][1]=arr[0].length;//存储列数
arr1[0][2]=sum;//有效个数
//遍历稀疏数组将非零的值,存放到稀疏数组中
int index=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(arr[i][j]!=0){
index++;
arr1[index][0]=i;
arr1[index][1]=j;
arr1[index][2]=arr[i][j];
}
}
}
System.out.println("输出稀疏数组:");
for (int[] ints : arr1) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("还原稀疏数组");
int[][] arr2=new int[arr1[0][0]][arr1[0][1]];
for (int i = 1; i < arr1.length; i++) {
arr2[arr1[i][0]][arr1[i][1]]=arr1[i][2];//相当与arr2[1][3]=1
}
for (int[] ints : arr2) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
?