稀疏数组是压缩存储大量零值二维数组的结构,首行存原数组行列数和有效值个数,后续每行存一个非零值的行列下标及值,用于节省内存并支持还原。

Java稀疏数组是一种专门用来压缩存储“大量零值或重复值”的二维数组的数据结构。它不保存全部元素,只记录那些真正有意义的非零(或非默认)值及其位置,从而大幅减少内存占用。
稀疏数组长什么样
它本身就是一个普通的二维int数组,但有固定格式:
- 第一行存三个数:原数组总行数、总列数、有效值个数
- 后面每一行存一个有效值:行下标、列下标、对应值
比如原数组是11×11,只有[1][2]=1和[2][3]=2两个非零值,那稀疏数组就是4行3列:
[0][0]=11, [0][1]=11, [0][2]=2
[1][0]=1, [1][1]=2, [1][2]=1
[2][0]=2, [2][1]=3, [2][2]=2
为什么用稀疏数组
核心就一个字:省。
- 原数组1000×1000,但只有20个非零值?直接存要100万个int;稀疏数组只要21行×3列 = 63个int
- 适合棋盘、地图、用户行为矩阵这类“大面积空白+少量标记”的场景
- 还能序列化到文件,之后精准还原原始结构
稀疏数组怎么用
实际使用分三步:
立即学习“Java免费学习笔记(深入)”;
- 遍历原数组,统计非零值个数,创建稀疏数组(大小 = 个数 + 1 行)
- 把第一行填上行列信息和总数,后续每行填一个有效值的坐标和值
- 需要时,再按稀疏数组内容反向重建原数组(先建空数组,再逐行赋值)
基本上就这些。不复杂但容易忽略第一行的元数据作用——少了它,根本没法还原原数组。











