09 稀疏数组
稀疏数组
代码
package com.zhan.base04Array;
public class Test09 {
// 稀疏数组
public static void main(String[] args) {
// 创建一个二维数组 ,模拟五子棋,空的地方为0 ,黑棋为1,白棋为2
//原始数组和稀疏数组表达的意义是一样的
System.out.println("原始数组和稀疏数组表达的意义是一样的");
System.out.println("很明显地看出,稀疏数组比原始数组更节省空间资源");
// 初始化一个原始数组
int[][] a=new int[11][11];
a[1][2]=1;
a[2][3]=2;
// 直接初始化一个等价的稀疏数组
int[][] b={{11,11,2}, {1,2,1}, {2,3,2}}; // 固定三列
// 模拟输出棋盘上的情况
printArrays1(a); //输出 原始数组
System.out.println("------------------------------------------------");
printArryas2(a); //输出 稀疏数组,本质上也是二维数组
System.out.println("------------------------------------------------");
printArrays3(b);
}
public static void printArrays1(int[][] a){
System.out.println("输出原始数组");
for (int[] ints : a) { // 注意遍历二维数组的增强型 for 循环
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
} //输出原始数组
public static void printArryas2(int[][] a){
// 转换为稀疏数组
// 第一步,创建稀疏数组
int sum=0; // 有效数字的个数
// 遍历原始数组,获取有效数字的个数
for (int[] ints : a) {
for (int x : ints) {
if(x != 0){ // 数字不等于0,有效数字,sum++
sum++;
}
}
}
int[][] b=new int[sum+1][3];
// 行数为有效数字的个数加 1(放原始数组的规模的有效数组的个数),列数固定为3
// 第二步,初始化稀疏数组
b[0][0]=11; b[0][1]=11; b[0][2]=sum; //初始化第零行
// 初始化下面的行
int rows=0; // 这对应着有效数字所在的行数,一开始为第1行, !!!实际上为第二行,数组索引
// 遍历原始数组,将有效数值赋值给 稀疏数组
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j]!=0){ // 判断有效数字
rows++;
b[rows][0]=i; // 将 有效数字所在的 行数,赋值给稀疏数组对应的元素
b[rows][1]=j; // 将 有效数字所在的 列数,赋值给稀疏数组对应的元素
b[rows][2]=a[i][j]; // 将有效数字的值,赋值给稀疏数组对应的元素
}
// 遍历完原始数组的某一行后,有效数字所在的行数将会变大,所以 rows +1
}
}
// 输出 稀疏数组
System.out.println("输出 稀疏数组");
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[i].length; j++) {
System.out.print(b[i][j]+"\t"); // +"\t" 可以对齐 , +" " 不能对齐
}
System.out.println();
}
} // 将原始数组转换为稀疏数组再输出
public static void printArrays3(int[][] b){
// 将稀疏数组还原成原始数组
int[][] arrays=new int [ b[0][0] ] [ b[0][1] ]; // 还原原始数组的规模
// 还原原始数组的各个数值
for (int i = 1; i < b.length; i++) { // 从 1 开始,因为此时 稀疏数组的第零行的数据无意义
arrays[ b[i][0] ] [ b[i][1] ] =b[i][2]; // 一次还原一个数字
}
// 输出原后的原始数组
System.out.println("输出还原后的原始数组");
for (int[] ints : arrays) { // 注意遍历二维数组的增强型 for 循环
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
} // 将稀疏数组还原成原始数组 再输出
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?