首先我们来了解一下什么是稀疏数组
像这样的一个11*11的数组,大多数元素都为0,我们为了将数组简化,就可以用到稀疏数组。将其简化为:
这就是我们简化后的稀疏数组。具体如何表达,其实很简单,我们来看代码吧。
public class SparseArray{
public static void main(String[] args){
//我们先创建一个原始数组11*11的
int arr1[][] = new int[11][11];
arr1[1][2] = 1;
arr1[2][3] = 2;
//将二维数组转换为稀疏数组
//①先遍历原始数组,得到非0元素的个数
int sum = 0;//记录非0元素个数
for(int i=0; i < arr1.length;i++){
for(int j=0; j < arr1.length; j++){
if(arr1[i][j] != 0) sum++;
}
}
//②创建稀疏数组
int sparseArray[][] = new int[sum+1][3]; //根据图可以看出来
//给稀疏数组赋值
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
//将非0元素存入稀疏数组中
int count = 0;
for(int i=0; i < arr1.length;i++){
for(int j=0; j < arr1.length; j++){
if(arr1[i][j] != 0){
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = arr1[i][j];
}
}
}
//对稀疏数组进行输出
for (int i = 0; i < sparseArray.length; i++) {
System.out.print(sparseArray[i][0] +"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]);
System.out.println();
}
System.out.println("----------------------------------------");
//接下来是稀疏数组如何转为原始数组
int arr2[][] = new int[sparseArray[0][0]][sparseArray[0][1]];
//将非0元素赋值到原始数组中
for(int i = 1;i < sparseArray.length;i++){
arr2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
//遍历转换后的原始数组
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2.length; j++) {
System.out.print(arr2[i][j]+" ");
}
System.out.println();
}
}
}