稀疏数组
一、稀疏数组的概念
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在,一个小规模的数组中,从而缩小程序的规模
二、稀疏数组举例
1.原数组
2.原数组对应的稀疏数组
三、代码展示
package com.kuang.array;
public class Demo08 {
public static void main(String[] args) {
//1.创建一个二维数组 11*11 0没有棋子 1黑棋 2白棋
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
//输出原始的数组
System.out.println("输出原始的数组:");
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
System.out.print(array1[i][j] + "\t");
}
System.out.println();
}
System.out.println("================");
//转换为稀疏数组保存
//获取有效值的个数
int sum = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
if (array1[i][j] != 0) {
sum++;
}
}
}
System.out.println("有效值的个数为:" + sum);
//2.创建一个稀疏数组的数组
int[][] array2 = new int[sum + 1][3];//行为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++){//方法1
// for(int j=0;j<array2[i].length;j++){
// System.out.print(array2[i][j]+"\t");
// }
// 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("还原");
//1.读取稀疏数组的值
int[][] array3=new int[array2[0][0]][array2[0][1]];
//2.给其中的元素还原它的值
for(int i=1;i<array2.length;i++){
array3[array2[i][0]][array2[i][1]]=array2[i][2];
}
//3.打印还原后的数组
for(int i=0;i<array3.length;i++){
for(int j=0;j<array3[i].length;j++){
System.out.print(array3[i][j]+"\t");
}
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
================
有效值的个数为:2
稀疏数组:
11 11 2
1 2 1
2 3 2
===================
还原
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