java笔记(4) 稀疏数组实现实例
没有原理讲解,仅记录一个实现代码,作为参考和笔记使用
如题,稀疏数组仅在原始数组有效数据较少的情况下起压缩空间的作用
实现过程:
首先为了方便查看和确认,封装一个打印二维数组的方法
public static void printArray(int[][] arrays) {
for (int[] array : arrays) {
for (int element : array) System.out.print(element + "\t");
System.out.println();
}
}
创建待压缩的原始数组
int[][] originArray = new int[11][11];
originArray[1][2] = 1;
originArray[2][3] = 2;
//输出原始数组
printArray(originArray);
原始数组长这样:
(
可见其中存在许多0元素,浪费了许多空间,可以通过创建稀疏数组来进行压缩。
创建稀疏数组:
//首先要获取原数组中有效数据的个数,用来确定稀疏数组的大小:
int sum = 0;
for (int i = 0; i < originArray.length; i++) {
for (int j = 0; j < originArray[0].length; j++) {
if (originArray[i][j] != 0) sum++;
}
}
//sum即为有效数据的个数,则稀疏数组总共有sum+1行,其中第一行存放数组尺寸和有效数据个数,后续行存放有效数据坐标和值
int[][] sparseArray = new int[sum + 1][3];
sparseArray[0][0] = originArray.length;
sparseArray[0][1] = originArray[0].length;
sparseArray[0][2] = sum;
//再次遍历原数组,记录有效数据的坐标和值
int sparseLine = 1; //标记稀疏数组的行号应从1开始,因为第"0"行用来记录数组尺寸了
for (int i = 0; i < originArray.length; i++) {
for (int j = 0; j < originArray[0].length; j++) {
if (originArray[i][j] != 0) {
sparseArray[sparseLine][0] = i;
sparseArray[sparseLine][1] = j;
sparseArray[sparseLine++][2] = originArray[i][j];
}
}
}
//至此,稀疏数组就创建完成了,打印看一下
printArray(sparseArray);
还原数组
根据稀疏数组中记录的数组信息和有效值信息,还原数组:
//首先,根据第"0"行的信息,创建跟原数组一样尺寸的数组
int[][] array3 = new int[sparseArray[0][0]][sparseArray[0][1]];
//从第"1"遍历稀疏数组,将记录的值还原到新数组
for (int i = 1; i < sparseArray.length; i++)
restoreArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
//打印看一下
printArray(restoreArray);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术