Day45 Java数组09 稀疏数组
1.什么是稀疏数组
- 当一个数组中大部分元素为值为0时,为了节省空间,可以将数组压缩为稀疏数组,来节省内存
- 稀疏数组的第一行为数组头,负责记录原始数组的行,列长度和非0值个数,
表达式为:
原始组数行 原始数组列 非0值个数
非0值行坐标 非0值列坐标 非0值的值
... ... ...
2.稀疏数组的转化和还原
public class Demo07 {
//稀疏数组
public static void main(String[] args) {
//创建一个原始数组
int[][] arraysA = new int[11][11];
arraysA[1][2] = 1;
arraysA[2][3] = 2;
System.out.println("原始组数为:");
print(arraysA); //打印原始数组
//将原始数组转换为稀疏数组
//首先遍历原始数组,确定有效数据个数
int sum = 0;
for (int[] line:arraysA){
for (int date:line){
if (date!= 0){
sum++;
}
}
}
System.out.println("有效数据个数为:"+sum);
//创建稀疏数组
int[][] arraysB = new int[sum+1][3];
//给稀疏数组头赋值(稀疏数组的第一行)
arraysB[0][0] = 11; //稀疏数组 第一行 第一列 为 原始数组行数
arraysB[0][1] = 11; //稀疏数组 第一行 第二列 为 原始数组列数
arraysB[0][2] = sum; //稀疏数组 第一行 第三列 为 有效数据个数
//将有效数据存放到稀疏数组中
int a = 1;
for (int i = 0;i < arraysA.length;i++){ //遍历每一行
for (int j = 0;j < arraysA[i].length;j++){ //遍历行里的每个数据
if (arraysA[i][j] != 0){ //如果遍历时遇到元素不等于0
arraysB[a][0] = i; //就把该元素的 行 赋值给 稀疏数组的[1][0]
arraysB[a][1] = j; //列 赋值给 稀疏数组的[1][1]
arraysB[a][2] = arraysA[i][j]; //元素的值 赋值给 [1][2]
a++; //给稀疏数组换行 后续识别到的非0数据依次 赋值给[2][0],[2][1],[2][2].......
}
}
}
System.out.println("转化的稀疏数组为:");
print(arraysB);
//还原稀疏数组
//读取稀疏数组
int[][] arraysC = new int[arraysB[0][0]][arraysB[0][1]];
//还原稀疏数组里的有效值
for (int i = 1;i < arraysB.length;i++){
arraysC[arraysB[i][0]][arraysB[i][1]] = arraysB[i][2];
}
System.out.println("还原的数组为:");
print(arraysC);
}
//打印二维数组 方法
public static void print(int[][] n){
for (int[] x:n){
for (int x2:x){
System.out.print(x2+"\t");
}
System.out.print("\n");
}
}
}
输出结果
原始组数为:
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

1万+

被折叠的 条评论
为什么被折叠?



