稀疏数组的用法
稀疏数组:当一个数组中大部分的元素为0,或者为同一值的数组时,可以采用稀疏数组来保存该数组。通常情况下,我们在棋盘或地图等,会采取该方法存储我们的数据。
稀疏数组对该数组的处理方法为: (1)记录数组一共有几行几列,记录有多少个不相同的值 (2)把具有不同值的元素的行列还有值记录在一个相对于较小规模的数组中,从而缩小程序的规模,达到方便存储的作用。
以下为图示:
原数组:
0 0 0 0 0 0 0 0 0 0
0 0 1 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
稀疏数组为:
10 10 2
1 2 1
1 3 2
实现方法:
public class Test2 {
public static void main(String[] args) {
int[][] chessArr1 = new int[10][10];
chessArr1[1][2] = 1;
chessArr1[1][3] = 2;
for (int[] row: chessArr1) {
for (int data: row) {
System.out.print(data+"\t");
}
System.out.println();
}
int sum = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (chessArr1[i][j] != 0)
sum++;
}
}
int[][] sparseArr = new int[sum + 1][3];
sparseArr[0][0] = 10;
sparseArr[0][1] = 10;
sparseArr[0][2] = sum;
int count = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (chessArr1[i][j]!=0)
{
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
System.out.println("-------------------------");
System.out.println("稀疏数组为:");
for (int i = 0; i < sparseArr.length; i++) {
System.out.println(sparseArr[i][0] + "\t" + sparseArr[i][1] + "\t" + sparseArr[i][2] + "\t");
}
int row = sparseArr[0][0];
int column = sparseArr[0][1];
int[][] chessArr2 = new int[row][column];
for (int i = 1; i < sparseArr.length; i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
System.out.println("-------------------------");
System.out.println("将稀疏数组转为原有的格式:");
for (int[] row1: chessArr2) {
for (int data2:row1) {
System.out.print(data2 + "\t");
}
System.out.println();
}
}
}