稀疏数组--初学时记
程序员文章站
2022-04-27 23:46:03
...
代码
本条代码可以直接运行,模拟棋盘中断记录,优化存储数据案例
public static void main(String[] args) {
int[][] array1 =new int[11][11];//创建11行11列的二维数组
array1[1][2] =1 ;//在第二行第三列加入有效值1
array1[2][3] =2 ;//在第三行第四列加入有效值2
//遍历二维数组
for (int[] num1:array1
) {
for (int num2:num1
) {
System.out.print(num2+"\t");
}
System.out.println();
}
//获取有效值的个数
int sum = 0 ;
for (int i = 0; i <11; i++) {
for (int j = 0; j <11 ; j++) {
if (array1[i][j]!=0){
sum++;
}
}
}
System.out.println(sum);
//创建稀疏数组
/*
* 稀疏数组
* --行--/--列--/有效值个数
* 行坐标/列坐标/有效值
* 行坐标/列坐标/有效值
* -----/-----/------*/
//为什么创建的行数为sum+1?因为第一行要列出:行数/列数/有效值个数,所以会多出一行
int [][] array2=new int[sum+1][3];
array2[0][0]=11;//行数
array2[0][1]=11;//列数
array2[0][2]=sum;//有效值个数
//遍历二维数组,将非零的值存放在稀疏数组中
int count = 0;//对有效值进行计数
for (int i = 0; i <array1.length ; i++) {
for (int j = 0; j <array1[i].length ; j++) {
if (array1[i][j]!=0){
count++;//如果遇到有效值,计数+1,并且恰好会避开稀疏数组表头的第0行
array2[count][0] = i;//第count个有效值的行数为i
array2[count][1] = j;//第count个有效值的列数为j
array2[count][2]=array1[i][j];//第count个有效值的列数为二维数组array1[i][j]
}
}
}
//遍历稀疏数组
for (int[] arr:array2
) {
for (int arr1:arr
) {
System.out.print(arr1+"\t");
}
System.out.println();
}
//还原稀疏数组
System.out.println("-----------还原----------");
//1.读取稀疏数组
//创建array3,并且行数是稀疏数组array2中的行数,列数是稀疏数组array2中的列数
int[][] array3=new int[array2[0][0]][array2[0][1]];
//2.给其中的元素还原值,不可使用for-each遍历,因为需要在遍历中给array3赋值
//此处i必须从1开始自增,因为如果从0开始遍历复制则将会把稀疏数组array2中的表头部分赋值到要还原的array3中
for (int i = 1; i <array2.length ; i++) {
//遍历稀疏数组array2给array3赋值
//定位:(↓array2中的行数,↓array2中的列数)赋值:↓
array3[array2[i][0]] [array2[i][1]]=array2[i][2];
}
//还原,遍历还原出来的array3数组
System.out.println("还原数组");
for (int[] arr:array3
) {
for (int arr1:arr
) {
System.out.print(arr1+"\t");
}
System.out.println();
}
}
二维数组模型
int[][] array = new int[5][5] // ↑ ↑ // x y
上一篇: [css3] :empty 选择器
下一篇: 设置标签属性的练习
推荐阅读