Java二维数组转换有四类高频路径:行列转置需互换维度并校验一致性;降维平铺要动态计数防错;结构映射转List或Map需语义匹配且预初始化;稀疏化压缩须先统计有效元素并按三元组存储。

Java 中二维数组的数据转换没有唯一标准解,但有几类高频、实用且结构清晰的通用路径。关键不在于“全都要”,而在于根据目标结构和原始数据特征,选对方向、避开常见坑。
行列转置(矩阵转置)
这是最典型的二维数组结构变换,核心是交换索引顺序。适用于需要按列优先访问、适配某些算法输入格式等场景。
- 新数组维度必须互换:原数组是 m × n,转置后是 n × m
- 赋值逻辑固定:transposed[j][i] = original[i][j],注意内外循环变量与索引的对应关系
- 务必提前校验原数组非空且每行长度一致,否则运行时可能抛
NullPointerException或ArrayIndexOutOfBoundsException
降维:二维转一维
当只需线性遍历所有元素(如序列化、批量处理、传递给不支持多维的接口),平铺是最直接方式。
- 目标数组长度 = 行数 × 列数,建议用
original.length * original[0].length计算,但需确保original和首行非 null - 使用单一索引
index累加赋值,避免嵌套下标计算错误 - 若原始数组存在“不规则”行(各行长度不同),需按实际元素个数动态计数,不能直接套用公式
结构映射:转 List 或 Map
面向对象场景中,List> 更易扩展和操作;Map 则适合键值明确的二维表(如配置项、属性集)。
立即学习“Java免费学习笔记(深入)”;
- 转
List<list>></list>:外层循环每行,内层循环每列,逐个add();推荐用Arrays.asList()或 Stream 的mapToInt配合toArray() - 转
Map<K, V>:要求二维数组本身具备键值语义(如String[2][2]中每行是{key, value}),需校验每行长度是否为 2,再调用map.put(row[0], row[1]) - 避免在循环中反复创建新集合实例,应在循环外初始化一次
稀疏化压缩存储
当二维数组含大量默认值(如 0、null),转稀疏数组可显著节省内存,常用于棋盘、地图、大型系数矩阵等场景。
- 第一步必做:遍历统计有效元素个数,决定稀疏数组行数(
count + 1) - 稀疏数组第 0 行存元信息:
[总行数, 总列数, 有效元素数] - 后续每行存三元组:
[行索引, 列索引, 值],顺序无关,但还原时需严格按此结构读取 - 还原时先建空二维数组,再依稀疏数组后几行逐个赋值,不可遗漏或错位



















