稀疏数组就是数组中,大部分的元素值都未被使用(或都为0),在数组中仅有少 部分的空间使用。所以形成内存空间的浪费,为了解决这问题,而且不影响数组中原 有的元素值,咱们采用了一种压缩的方式来 表示稀疏数组的内容。 如图二维数组所示,有大部分的空间是无用的。 数组
public class SparseArray {
private static final int row = 9;
private static final int col = 7;
public static void main(String[] args) {
// 建立一个原始的二维数组
int arr[][] = new int[row][col];
arr[1][1]=3;
arr[3][0]=1;
arr[3][1]=4;
arr[4][2]=7;
arr[5][5]=5;
System.out.println("输入原始二维数组-----------------");
prt(arr);
System.out.println("-------------------------------");
// 将二维数组变成稀疏数组
// 遍历获得非零数据个数
int sum=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(arr[i][j]!=0){
sum++;
}
}
}
// 建立对应稀疏数组
int sparse[][] = new int[sum+1][3];
// 给稀疏数组赋值
sparse[0][0] = arr.length;
sparse[0][1] = arr[0].length;
sparse[0][2] = sum;
// 遍历二维数组。将非零值存放到稀疏数组
int count =0; // 用于记录第几个非零
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(arr[i][j]!=0){
count++;
sparse[count][0] = i;
sparse[count][1] = j;
sparse[count][2] = arr[i][j];
}
}
}
// 输出稀疏数组
System.out.println("输出稀疏数组");
prt(sparse);
// 将稀疏数组还原成二维数组
int arr2[][] =new int[sparse[0][0]][sparse[0][1]];
for (int i = 1; i <sparse.length ; i++) {
arr2[sparse[i][0]][sparse[i][1]] = sparse[i][2];
}
System.out.println("输出还原的二维数组");
prt(arr2);
}
public static void prt(int [][] arr ){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println("\n");
}
}
}
复制代码