某个数据中,若某项无意义数据大量存在,就可以使用稀疏数组代替原数组。保存原数组中有效的信息的前提下,省略大量的无意义数据,从而达到节省空间的目的。
public class SparseArray {
public static void main(String[] args){
int[][] original = {
{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}
};
//原始数组 转 稀疏数组
//遍历原始数组,统计有多少个有效数据
int count = 0;
for(int i = 0; i < original.length; i++){
for(int j = 0; j < original[i].length; j++){
if(original[i][j] != 0){
count++;
}
}
}
//建立稀疏数组,并完成第一行数据:行、列、值
int[][] sparseArray = new int[count+1][3];
sparseArray[0][0] = original.length;
sparseArray[0][1] = original[0].length;
sparseArray[0][2] = count;
//将有效数据录入稀疏数组中
int row = 1;
for(int i = 0; i < original.length; i++){
for(int j = 0; j < original[i].length; j++){
if(original[i][j] != 0){
sparseArray[row][0] = i;
sparseArray[row][1] = j;
sparseArray[row][2] = original[i][j];
row++;
}
}
}
//test
// for(int i = 0; i < sparseArray.length; i++){
// for(int j = 0; j < sparseArray[i].length; j++){
// System.out.print(sparseArray[i][j]);
// System.out.print(" ");
// }
// System.out.println();
// }
//稀疏矩阵 转 原始矩阵
int[][] originalArray = new int[sparseArray[0][0]][sparseArray[0][1]];
int Row = 1;
for(int i = 0; i < originalArray.length; i++){
for(int j = 0; j < originalArray[i].length; j++){
if (Row < sparseArray.length && i == sparseArray[Row][0] && j == sparseArray[Row][1]){
originalArray[i][j] = sparseArray[Row][2];
Row++;
}else{
originalArray[i][j] = 0;
}
}
}
//test
for(int i = 0; i < originalArray.length; i++){
for(int j = 0; j < originalArray[i].length; j++){
System.out.print(originalArray[i][j]);
System.out.print(" ");
}
System.out.println();
}
}
}
//test部分仅为输出测试,与稀疏数组本身无关。