1.二维数组
实际运用的场景中,会遇到如下情形的数组。
如果存储所有的数据,那么会产生11*11=121个数据。
2.稀疏数组
可以采取的手段,是简化记录,将数组化简如下。
3.恢复数组
其代码如下:
package com.cn.day01;
class SparseArray {
public static void main(String[] args) {
System.out.println("创建一个二维数组:");
//1.原始数组
int[][] chessArray = new int[11][11];
chessArray[1][4] = 1;
chessArray[2][6] = 6;
chessArray[4][5] = 2;
//2.遍历原始数组,外层是以行为界的数组,内层是行数组中的值
for (int[] row : chessArray) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
//3.建立一个数组,记录行、列与相应位置的值
//3.1先统计数组中,值不为0的数
int sum = 0;
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray.length; j++) {
if (chessArray[i][j] != 0){
sum ++;
}
}
}
//输出不为0的实数的总数
System.out.println(sum);
//3.2建立一个稀疏数组,记录数据
int [][] sparseArray = new int[sum + 1][3];
//第一行,记录原始数组的总行数、总列数和非0数的总数。
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
//遍历数组,记录非0数据
int count = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArray[i][j] != 0){
count ++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArray[i][j];
}
}
}
//打印稀疏数组
System.out.println("打印稀疏数组:");
for (int i = 0; i < sparseArray.length; i++) {
System.out.printf("%d\t%d\t%d\t\n",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);
}
//4.从稀疏数组恢复原始数组
//4.1根据行列数建立一个数组
int[][] arrayRevive = new int[sparseArray[0][0]][sparseArray[0][1]];
//4.2从稀疏数组中读取非0数据,放入arrayRevive数组中
for (int i = 1; i < sparseArray.length; i++) {
arrayRevive[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
for (int[] row : arrayRevive) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}